LoginSignup
3

More than 1 year has passed since last update.

posted at

updated at

Graylog(Splunk代替ログ分析OSS)の導入&チューニングTips

icon.png

はじめに

Graylogとは…
サーバ、NW機器、アプリといったテラバイト級の各種マシンデータ・ログを集約して一元的なリアルタイム検索とログ分析・キャプチャ・保存ができるOSSである。
Elasticsearch、MongoDB、Oracle Javaで構成される3層アーキテクチャでスケーラブルな構成が特徴である。
GraylogのWikipedia(English)より抜粋

本記事の紹介理由

1日数十GBのログを分析する為、Splunk導入を検討したがログ量に応じてライセンスが高くなる為、費用対効果を見い出せなかった。代わりのログ分析ツールとしてメジャーな「ELK」と「Graylog」を比較検討した結果、導入が簡単な「OVA版Graylog」に決めた。WindowsのVMware Workstation Player上で導入検証してみて、途中つまずいた箇所があったので当方の備忘も兼ねて整理・紹介する。
ちなみに1日500MB未満のログ分析であればSplunk無料版で十分なので、そちらを導入・使用することを推奨する。

以下記載の手順は主に2021/7/5時点のgraylog公式ドキュメントを参考にしながら導入した内容のまとめです。

準備するもの

GraylogのOVAファイル置き場より最新バージョンをダウンロードする。
※本記事は「Graylog-4.0.8-1.ova」を使用(2021/7/5時点最新)
VMware Workstation Playerファイル置き場より最新バージョンをダウンロードする。
※本記事は「Workstation 16.0 Player for Windows 」を使用

導入手順

OVAデプロイ

VMware Workstation PlayerにOVAファイルからの仮想マシンをデプロイ
image.png
仮想マシン設定は以下の通り(ハードディスクはデフォルト19.5GBだが40GBに拡張)
image.png

仮想マシンにSSH接続

OVA版はSSHアクセスがデフォルトで許可されているので、TeratermでSSHアクセスします。
デフォルトのID/PWはubuntu/ubuntuです。
image.png

起動するとWebログインアドレスとGraylogの管理者(admin)のパスワード、OSのユーザー・パスワードが表示されます

仮想マシンの固定IPアドレス設定

固定IPに割り振る場合は以下コマンドにて、対象ファイルを編集する。
※当方が設定した固定IPですので、環境に合わせて変更してください。

$ sudo vi /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: yes
    ens160:
      dhcp4: no
      dhcp6: no
      addresses: [192.168.0.4/24]
      gateway4: 192.168.0.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]

ip addressコマンドで確認した結果

$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:69:d6:73 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.4/24 brd 192.168.0.255 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe69:d673/64 scope link
       valid_lft forever preferred_lft forever

最後に設定を反映させること

$ sudo netplan apply

Syslog用ポート転送設定

Graylogは1024以下のポートを使用したINPUT(受信)設定ができない。
その為、Syslog用ポート514は1514ポートへリダイレクトするように以下コマンドで設定反映

$ sudo iptables -t nat -A PREROUTING -p tcp --dport 514 -j REDIRECT --to 1514
$ sudo iptables -t nat -A PREROUTING -p udp --dport 514 -j REDIRECT --to 1514

設定が反映されているかの確認

$ sudo iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:514 redir ports 1514
REDIRECT   udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:514 redir ports 1514

Syslog用ポート通信許可

以下コマンドで設定反映

$ sudo iptables -A INPUT -p udp --dport 514 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport 514 -j ACCEPT
$ sudo iptables -A INPUT -p udp --dport 1514 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport 1514 -j ACCEPT

設定反映されているかの確認

$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -p udp -m udp --dport 514 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 514 -j ACCEPT
-A INPUT -p udp -m udp --dport 1514 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1514 -j ACCEPT

iptables再起動後の設定保持方法

仮想マシンを再起動すると、iptables設定がリセットされてしまうので「netfilter-persistent」をDL&インストールして保存する。
※こちらの[記事(https://qiita.com/yas-nyan/items/e5500cf67236d11cce72)を参考にしました。

$ sudo apt install iptables-persistent
$ sudo /etc/init.d/netfilter-persistent save

「netfilter-persistent」のステータス確認

$ sudo /etc/init.d/netfilter-persistent status
● netfilter-persistent.service - netfilter persistent configuration
   Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
   Active: active (exited) since ... ←

Proxy設定(必要に応じて)

社内でProxyを利用しているのであれば以下設定しておくと良い。
①bashrcファイルのProxy設定

$ echo -e "\n## proxy setting"  >> ~/.bashrc
$ echo 'export http_proxy="http://proxy_server:port/"' >> ~/.bashrc
$ echo 'export https_proxy=$http_proxy' >> ~/.bashrc

②apt.confファイルのProxy設定

$ sudo vi /etc/apt/apt.conf

Acquire::http::Proxy "http://proxy_server:port";
Acquire::https::Proxy "http://proxy_server:port";

時刻設定

ログ確認する時に実際の時間と違うと困るので日本時間に設定&時刻同期サービスも有効にしておく。
・サーバのタイムゾーンを日本時間に設定

$ sudo timedatectl set-timezone Asia/Tokyo

・時刻同期サービスの設定変更

$ sudo vi /etc/systemd/timesyncd.conf
[Time]
NTP=ntp.nict.jp

・時刻同期サービス再起動して設定反映

$ systemctl restart systemd-timesyncd

・設定後の確認コマンド

$ date
Sat Aug 21 11:09:50 JST 20yy

Graylogサービス設定変更

以下コマンドでgraylogサービス設定ファイル編集

$ sudo vi /etc/graylog/server/server.conf

◆変更箇所
・Adminアカウントのデフォルトパスワード変更
「password_secret = xxx」「root_password_sha2 = yyy」を追記
※xxxとyyyのパスワード生成方法はこちらを参照
image.png

・「root_timezone = Asia/Tokyo」を追記(日本時間に設定)
image.png

以下コマンドでサービス再起動して設定反映

$ sudo systemctl restart graylog-server.service

使用方法

Graylogブラウザアクセス

上記導入が済めば「http://設定IP」でログインできます。
▼ログイン画面
image.png
▼ログイン後の画面
image.png

Graylog Syslog受信設定

①トップバ-のSystem -> Inputsを選択してクリック。
image.png

②Inputs画面が表示されたら「Select input」のプルダウンリストより「Syslog UDP」を選び「Launch new input」をクリックする。
image.png

③以下のとおり赤枠箇所を設定したら保存。これでUDPのSyslogは受信できる状態になった。
image.png
※TCPのSyslogもInputs画面の「Select input」のプルダウンリストより「Syslog TCP」を選び同じようなInput設定をすれば良い。
※稀に受信がうまくいかないことがあるようで、その場合は「Raw/Plaintext TCP」や「Raw/Plaintext UDP」でInput設定をすると良い。

syslog受信確認1(PortQryUI使用)

・ダミーパケットを生成
MS公式ツールのPortQryUIを使って、syslogダミーパケットを生成
image.png

・Graylogダッシュボードでsyslogダミーパケットを表示できていることを確認
image.png

syslog受信確認2(Rsyslog Windows Agent使用)

Rsyslog Windows Agentを使用してWindowsイベントをSyslogで飛ばしてみる。
インストール後の設定は以下のとおり。設定後にStartボタンを押せばSyslog送信開始。

①Syslog Tartget Options
・Syslog ServerはGraylogサーバのIPアドレス、Syslog UDPは「514」と入力
image.png

②Syslog Message Options
・Protocol Typeは「UDP」を指定
・Output Encodingは「Unicode(UTF8)」を指定
image.png

チューニング手順

Graylog JVMヒープ変更

Graylogは収集ログが増えるとJVM(JAVA仮想マシン)のヒープ領域が不足してパフォーマンスが悪くなる。必要に応じてメモリ領域を増やしてJVMヒープ領域も変更してあげる必要がある。(基本は割り当てメモリの半分。例えばメモリ4GBならJVMヒープ領域は2GBが望ましい。)
※こちらの記事を参考にしました。

以下コマンドでGraylogのJVMヒープ設定ファイル編集

$ sudo vi /etc/default/graylog-server

デフォルトは以下の通り1GBしか割り当てられていない。
image.png

# Default Java options for heap and garbage collection.
GRAYLOG_SERVER_JAVA_OPTS="-Xms1g -Xmx1g -XX:NewRatio=1 -server -XX:+ResizeTLAB -XX:-OmitStackTraceInFastThrow"

2GBにするのであれば以下の通り変更する。

# Default Java options for heap and garbage collection.
GRAYLOG_SERVER_JAVA_OPTS="-Xms2g -Xmx2g -XX:NewRatio=1 -server -XX:+ResizeTLAB -XX:-OmitStackTraceInFastThrow"

以下コマンドでサービス再起動して設定反映

$ sudo systemctl restart graylog-server.service

GUIのNodes画面でHeap設定の変更状態を確認
image.png

Elasticsearch JVMヒープ変更

以下コマンドでGraylogのJVMヒープ設定ファイル編集

$ sudo vi /etc/elasticsearch/jvm.options

デフォルトは以下の通り1GBしか割り当てられていない。

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms1g
-Xmx1g

2GBにするのであれば以下の通り変更する。

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms2g
-Xmx2g

以下コマンドでサービス再起動して設定反映

$ sudo systemctl restart elasticsearch.service

以下コマンドでメモリ使用量を確認

$  top | grep elastic
 1388 elastic+  20   0 4902296 2.253g  25004 S   0.7 58.5   0:22.17 java

ディスクサイズ拡張

OVAのディスクサイズはデフォルト19GBしかない。VMware Playerで仮想マシンのディスクサイズは40GBに変更しているので、別途パーティション拡張が必要になる。
ちなみに公式QAにディスクサイズ拡張に関するQAがあったが、GraylogのOVAは実稼働での使用を目的としておらず、あくまで検証目的であるというコメントも見受けられた。。
とは言っても、ディスクサイズ拡張をすれば良いとのことなので以下手順で問題なくできた。
※こちらの記事①記事②を参考にしました。

①現在のパーティション状態を表示

$ df -h

Filesystem                    Size  Used Avail Use% Mounted on
udev                          2.0G     0  2.0G   0% /dev
tmpfs                         395M  748K  394M   1% /run
/dev/mapper/graylog--vg-root   19G  3.8G   14G  23% /
tmpfs                         2.0G     0  2.0G   0% /dev/shm
tmpfs                         5.0M     0  5.0M   0% /run/lock
tmpfs                         2.0G     0  2.0G   0% /sys/fs/cgroup
tmpfs                         395M     0  395M   0% /run/user/1000

②パーティション拡張

$ sudo fdisk /dev/sda   ←左記コマンドを入力してEnter

Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p   ←pと入力してEnter(現状のパーティション確認)
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x07167e33

Device     Boot Start      End  Sectors  Size Id Type
/dev/sda1  *     2048 40957951 40955904 19.5G 8e Linux LVM

Command (m for help): n   ←nと入力してEnter(新規パーティション作成)
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p):   ←デフォルトで良いのでブランクのままEnter
Using default response p.
Partition number (2-4, default 2):   ←デフォルトで良いのでブランクのままEnter
First sector (40957952-83886079, default 40957952):   ←デフォルトで良いのでブランクのままEnter
Last sector, +sectors or +size{K,M,G,T,P} (40957952-83886079, default 83886079):   ←デフォルトで良いのでブランクのままEnter

Created a new partition 2 of type 'Linux' and of size 20.5 GiB.

Command (m for help): p   ←拡張パーティションの確認
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x07167e33

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048 40957951 40955904 19.5G 8e Linux LVM
/dev/sda2       40957952 83886079 42928128 20.5G 83 Linux   ←拡張パーティション

Command (m for help): w   ←wと入力してEnter(設定保存。修正する場合は終了「q」を入力してEnterすること。)
The partition table has been altered.
Syncing disks.

③「graylog-vg 」が新しいディスク領域として認識するように設定

$ sudo vgextend graylog-vg /dev/sda2

  Physical volume "/dev/sda2" successfully created.
  Volume group "graylog-vg" successfully extended

④ボリュームグループの詳細情報を表示

$ sudo vgdisplay

  --- Volume group ---
  VG Name               graylog-vg
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               <40.00 GiB
  PE Size               4.00 MiB
  Total PE              10239
  Alloc PE / Size       4999 / <19.53 GiB
  Free  PE / Size       5240 / <20.47 GiB
  VG UUID               wgRRFs-Kl1X-sBSh-VNwW-Mch7-SnHL-er5xd8

⑤「/dev/mapper/graylog--vg-root」が新しいディスク領域を100%使用するように変更

$ sudo lvresize --resizefs --extents  +100%FREE /dev/mapper/graylog--vg-root

  Size of logical volume graylog-vg/root changed from 18.57 GiB (4754 extents) to <39.04 GiB (9994 extents).
  Logical volume graylog-vg/root successfully resized.
resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/mapper/graylog--vg-root is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 5
The filesystem on /dev/mapper/graylog--vg-root is now 10233856 (4k) blocks long.

⑥パーティション拡張した結果を表示

$  df -h

Filesystem                    Size  Used Avail Use% Mounted on
udev                          2.0G     0  2.0G   0% /dev
tmpfs                         395M  752K  394M   1% /run
/dev/mapper/graylog--vg-root   39G  3.9G   33G  11% /   ←パーティション拡張した結果
tmpfs                         2.0G     0  2.0G   0% /dev/shm
tmpfs                         5.0M     0  5.0M   0% /run/lock
tmpfs                         2.0G     0  2.0G   0% /sys/fs/cgroup
tmpfs                         395M     0  395M   0% /run/user/1000

Graylogバージョンアップ方法

バージョンアップは以下手順の通り。(v4.0→v4.1はこの手順で問題なかった)

①サービス停止

$ sudo systemctl stop graylog-server.service

②アップデート&インストール

$ wget https://packages.graylog2.org/repo/packages/graylog-4.1-repository_latest.deb
$ sudo dpkg -i graylog-4.1-repository_latest.deb
& sudo apt-get update && sudo apt-get install graylog-server graylog-enterprise-plugins graylog-integrations-plugins graylog-enterprise-integrations-plugins

※インストール時に「server.conf」を上書きして良いかというメッセージが出るが「No」を選択すること。
 デフォルト「Yes」を選択してしまうと、Adminアカウントのデフォルトパスワード再設定等が必要になる。。

③サービス再開

$ sudo systemctl start graylog-server.service

(参考)Graylogダッシュボードのログ検索で何も表示されない事象例と対処方法

Graylogのディスク領域が100%になるとインデクサーの破損が起きて、ログ検索しても何も表示されなくなる事象が起きることがある。
本事象が起きた場合は以下手順でジャーナルログをすべて削除する。
※こちらの記事を参考にしました。

$ sudo systemctl stop graylog-server.service
$ cd /var/lib/graylog-server/journal/
$ sudo rm -rf * .[a-z]*
$ sudo systemctl start graylog-server.service

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3