Graylogで「Graylog Collector sidecar」を用いてログの転送を行わせる(Linux)

Graylogでは、Syslogのほかに「Graylog Collector Sidecar」というエージェントを使ってのログ収集方法がある。
この方式の場合、GELFというGraylogの独自フォーマットでのログ入力フォーマットを使えるため、Syslogに比べて詳細な情報を記録しておくことが可能になる。

今回は、この「Graylog Collector Sidecar」を用いてGELFでのログをGraylogに連携させる。このとき、エージェントからGraylogへのデータ転送にはFilebeat、Winlogbeat、NXLogが使えるのだが、今回はNXLogを利用する。手順については公式の手順が用意されているので、それを参考に行う。
なお、すでにGraylog Server側でGELFのインプットは作成済の状態とする(TCP)。

1.Graylog Collector Sidecarのインストール

まずはGraylog Collector Sidecarのパッケージのインストールから。
こちらから対象のディストリビューションに対応したパッケージをダウンロードして、以下のコマンドでインストールを行う。

sudo rpm -ihv https://github.com/Graylog2/collector-sidecar/releases/download/0.0.9/collector-sidecar-0.0.9-1.x86_64.rpm # CentOSなどRHEL系の場合
wget --quiet https://github.com/Graylog2/collector-sidecar/releases/download/0.0.9/collector-sidecar_0.0.9-1_amd64.deb && sudo dpkg -i collector-sidecar_0.0.9-1_amd64.deb && rm collector-sidecar_0.0.9-1_amd64.deb # Debian/Ubuntu系

2.NXLogのインストール

次に、Graylog Collector SidecarからGraylog Serverへログを転送させるために用いるNXLogのインストールを行う。
こちらのページからパッケージをダウンロードしてインストールする。

CentOS 7の場合

yum install https://nxlog.co/system/files/products/files/1/nxlog-ce-2.9.1716-1_rhel7.x86_64.rpm
sudo service nxlog stop
sudo chkconfig --del nxlog
sudo gpasswd -a nxlog root
sudo chown -R nxlog.nxlog /var/spool/collector-sidecar/nxlog

Ubuntu Server 16.04の場合

sudo apt-get install libapr1 libdbi1
wget --quiet https://nxlog.co/system/files/products/files/1/nxlog-ce_2.9.1716_ubuntu_1604_amd64.deb && sudo dpkg -i nxlog-ce_2.9.1716_ubuntu_1604_amd64.deb && rm nxlog-ce_2.9.1716_ubuntu_1604_amd64.deb
sudo /etc/init.d/nxlog stop
sudo update-rc.d -f nxlog remove
sudo gpasswd -a nxlog adm
sudo chown -R nxlog.nxlog /var/spool/collector-sidecar/nxlog

インストール完了後、以下のコマンドでGraylog Collector Sidecarのサービスを稼働させる。

sudo graylog-collector-sidecar -service install
sudo systemctl start collector-sidecar

3.設定ファイルの編集

最後に、Graylog Collector Sidecarの設定ファイルを編集してやる。
(とりあえずここではタグを「linux」にしているが、できればCentOSやUbuntuで分けて書いてやったほうがいいと思う。)

●/etc/graylog/collector-sidecar/collector_sidecar.yml

server_url: http://GraylogServerのホスト名orIPアドレス:12900
update_interval: 30
tls_skip_verify: true
send_status: true
list_log_files:
  - /var/log
node_id: エージェントのノード名(重複すると正常動作しないので注意)
collector_id: file:/etc/graylog/collector-sidecar/collector-id
log_path: /var/log/graylog/collector-sidecar
log_rotation_time: 86400
log_max_age: 604800
tags:
  - linux
backends:
    - name: nxlog
      enabled: true
      binary_path: /usr/bin/nxlog
      configuration_path: /etc/graylog/collector-sidecar/generated/nxlog.conf

最後に、Graylog Collector Sidecarを再起動する。

systemctl restart collector-sidecar

4.GraylogServerの管理画面からエージェントの設定を行う

Graylog Collector Sidecarの設定が終わったら、続きはGraylog Server側の管理画面で行う。
Graylog Serverのトップページから[System] > [Collector]を開き、先ほど設定したエージェントが表示されていることを確認する。

右上にある「Manage Configuration」をクリックして、「Create Configuration」から新しいコンフィグを作成する。
(ここでは、とりあえず「Linux」というコンフィグを作っている)

コンフィグの作成後、コンフィグ名をクリックして内容を編集する。
基本的には、以下の設定だけやってやればよい。

  • Tagの追加(Graylog Collector Sidecarで指定したタグ)
  • Configure Collector Outputsの設定(Graylog Collector SidecarからGraylog Serverへログを転送する際の設定)
  • Configure Collector Inputsの設定(Graylog Collector Sidecarで収集するログの設定)

なお、このときにDebian系とRHEL系で同居させる場合は、「Define Snippets」のnxlog-defaultsを以下のように編集する必要がある。

{{if .Linux}}
User nxlog
Group nxlog
{{if eq .LinuxPlatform "debian"}}
Moduledir /usr/lib/nxlog/modules
{{end}}
{{if eq .LinuxPlatform "redhat"}}
Moduledir /usr/libexec/nxlog/modules
{{end}}
CacheDir /var/spool/collector-sidecar/nxlog
PidFile /var/run/graylog/collector-sidecar/nxlog.pid
define LOGFILE /var/log/graylog/collector-sidecar/nxlog.log
LogFile %LOGFILE%
LogLevel INFO

<Extension logrotate>
    Module  xm_fileop
    <Schedule>
        When    @daily
        Exec    file_cycle('%LOGFILE%', 7);
     </Schedule>
</Extension>
{{end}}
{{if .Windows}}
Moduledir %ROOT%\modules
CacheDir %ROOT%\data
Pidfile %ROOT%\data\nxlog.pid
SpoolDir %ROOT%\data
LogFile %ROOT%\data\nxlog.log
LogLevel INFO

<Extension logrotate>
    Module  xm_fileop
    <Schedule>
        When    @daily
        Exec    file_cycle('%ROOT%\data\nxlog.log', 7);
     </Schedule>
</Extension>
{{end}}

これで、Graylog Collector Sidecarでのログ転送が行えるようになった。