個人的には、ログはテキストファイルの方が色々と都合が良い(後からの統計取得だったり検知・加工してエラー確認とかシェル芸でできるので)のだが、諸々の事情(セキュリティ的な色々だったり、コマンド操作があまりできない人でも使える状態にしたいなど)によって、テキストファイルでの出力や保管、閲覧が都合が悪い事がある。 で、rsyslogではログをDBに出力可能なので、今回はOSにはCentOS 7を、出力先のDBにはローカルにインストールしたMariaDBを用いる。

1. MariaDBのインストール

まずはMariaDB自体のインストールから。以下のコマンドでインストールする。

yum i...

CentOSやUbuntuといった主要ディストリだと、Syslogにはrsyslogが使われている(ので、rsyslogがよく使われていると思う)。 でまぁ、rsyslogでlocalファシリティ(local5.infoとか)の設定をして、ファシリティ別に別ファイルにログを送るようにrsyslogで設定する際、以下の記述をしてないと「/var/log/messages」とか「/var/log/syslog」にもログが飛んでしまう。


Nginxのログをsyslogで管理する場合、Niginx 1.7.1以降であればaccess_logおよびerror_logがSyslogをサポートするようになっている。 2017年3月現在、aptや(Epel経由にはなるが)yumでインストールできるNginxは1.7.1以降になるので、その前提で進めていく。

設定自体は簡単で、Nginxの設定ファイルでaccess_log/error_logの設定を以下のように書き換えてやればよい。 ただ、ローカル内のSyslogへ転送する場合でもUDP経由で送る必要がある(上にtcpで直接リモートのサーバには転送できない)ので、事前にrsyslog...


Apacheのアクセスログやエラーログだが、デフォルトではSyslogは経由しない。 これらをSyslogを使って管理する場合、httpd.confに設定の追加が必要になる。

設定自体は簡単で、CustomLog/ErrorLogの設定に対して、パイプで繋げてloggerでSyslogに流すだけだ。 以下、設定の記述例(VirtualHostとか設定してると記述先のファイルも変わるので、自分の環境に合わせて記述すること)。 CentOS 7で確認をしている。

/etc/httpd/conf/httpd.conf
CustomLog "|/usr/bin/logger -p l...

rsyslogでomkafkaを使用して直接Kafkaにログを転送する

rsyslogには、バージョン8.7からはデフォルトでKafkaに連携するモジュール「omkafka」というものが用意されている。 今回は、これを使ってrsyslogから直接Kafkaにログを転送する。

なお、CentOS 7の場合だとrsyslogは7系が使われているので、別途8系をインストールしてやる必要があるようだ(まぁ、当たり前だがやる前にちゃんと事前にテストをするように…)。 rsyslogのバージョン8.7以降をインストールしたら、設定ファイル「/etc/rsyslog.conf」に以下の内容を記述してやる(brokerは複数指定可能)。

/etc/rsyslog....

SyslogをKafkaサーバに転送して、そこからGraylogをつかってlogをPub-Sub方式で取得をさせる

前回、syslogをKafkaに転送させるようにしたので、今度はそこからGraylogでログを取得する。 特にプラグインもなしでできるので、(いろいろと問題はあるが)なかなか良い感じだ。

設定は簡単で、[System] > [Inputs]で新規のインプットとして[GELF Kafka]を選択し、「Launch new input」から新しいインプットを作成するだけだ。

zookeeperのアドレスは複数指定できるので、各ノードのアドレスを指定してやる。

で、INPUTが正常に作成・動作したら、以下のようにKafkaからログが取得されるようになる。

...

KafkaでSyslogを受け取らせようとしてるのだが、CentOS 7からKafkaにログを送る際rsyslogのバージョンが7系なので、そのまま送るのはちょっと厳しい(rsyslog 8.x系だったらomkafkaモジュールが使える)。 さすがにそんな気軽にほいほいrsyslogのバージョン変更するのもアレなので、定番であるfluentdをあいだに入れてやることにする。

一応、fluentdではsyslogでログを受け付けることができるのだが、udpしか受け付けられないのでログの暗号化ができない。 このため、localhostのrsyslogからログを受け付けてやるようにする。...


CentOS 7では、バンドルされているrsyslogのバージョンは7系になっている。 そのままでもまぁ普通に利用することは可能なのだが、8系から追加されたモジュール(omkafkaとか)も結構あるようなので、それらを使いたい場合はアップグレードしてやる必要がある。

CentOS 7でrsyslog 8.x系に乗り換えるには、オフィシャルで用意されているリポジトリを入れてやると楽だろう。

wget http://rpms.adiscon.com/v8-stable/rsyslog.repo -O /etc/yum.repos.d/rsyslog.repo
yum install rsy...

単純にRsyslogでログ転送の設定をした場合、サーバへのログのパケットは平文で転送されるのでパケットキャプチャをされると中身が見えてしまう。 これを防ぐには、ログの転送時に暗号化をするように設定をする必要がある。

今回は、RsyslogサーバにCentOS 7を用いての設定を行う。

1.Rsyslogサーバ側の設定

前提となるパッケージの導入

まず、以下のコマンドを実行し暗号化に必要となるパッケージの導入を行う。

yum install -y gnutls-utils rsyslog-gnutls openssl

CA証明書の作成

パッケージの導入後、CA証明書の...


Ubuntu Server 16.04でRsyslogサーバへのログ転送をする場合は、クライアント側で以下のようコマンドを実行し、設定ファイルを作成する。

sudo sh -c 'cat <<"EOF" > /etc/rsyslog.d/60-toserver.conf
*.*     @@Rsyslogサーバのホスト名orIPアドレス:514

$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionRes...

CentOS 7でrsyslogサーバを構築し、クライアントからのログを受け付ける設定をする。

1.基本的な設定

サーバ側の設定

まずはrsyslogサーバとなるホスト上で、以下のように設定ファイル(/etc/rsyslog.conf)の記述を変更する。

/etc/rsyslog.conf
# Provides UDP syslog reception $ModLoad imudp # コメントアウトを解除(UDP) $UDPServerRun 514 # コメントアウトを解除(UDP) # Provides TCP syslog reception $ModLoa...

今使っているCentOS 7のサーバでは、journalからのログをrsyslogを使って振り分けているのだが、どうもログが出力されていない状態になった。で、調べたところ「/var/log/messages」に以下のようなエラーが出ていた。

Apr XX 17:XX:21 localhost journal: Suppressed 529 messages from /user.slice/user-1000.slice