はじめに
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ファイルからの仮想マシンをデプロイ
仮想マシン設定は以下の通り(ハードディスクはデフォルト19.5GBだが40GBに拡張)
仮想マシンにSSH接続
OVA版はSSHアクセスがデフォルトで許可されているので、TeratermでSSHアクセスします。
デフォルトのID/PWはubuntu/ubuntuです。
起動すると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サービスの基本設定は「/etc/graylog/server/server.conf」に記載されている。
まずはadminアカウントのデフォルトパスワードを変更する。具体的には「/etc/graylog/server/server.conf」の中にある「password_secret = xxx」と「root_password_sha2 = yyy」の2か所を変更する。
▼「password_secret = xxx」のxxx(シークレットキー)生成方法
$ pwgen -N 1 -s 96
xxx
▼「root_password_sha2 = yyy」のyyy(adminのハッシュパスワード)生成方法
$ echo -n (yourpassword) | shasum -a 256
yyy
以下コマンドでgraylogサービス設定ファイル編集して該当箇所にxxxとyyyを入力。
$ sudo vi /etc/graylog/server/server.conf
password_secret = xxx
root_password_sha2 = yyy
※こちらの記事を参考にしました。
・「root_timezone = Asia/Tokyo」を追記(日本時間に設定)
以下コマンドでサービス再起動して設定反映
$ sudo systemctl restart graylog-server.service
使用方法
Graylogブラウザアクセス
上記導入が済めば「http://設定IP」でログインできます。
▼ログイン画面
▼ログイン後の画面
Graylog Syslog受信設定
①トップバ-のSystem -> Inputsを選択してクリック。
②Inputs画面が表示されたら「Select input」のプルダウンリストより「Syslog UDP」を選び「Launch new input」をクリックする。
③以下のとおり赤枠箇所を設定したら保存。これでUDPのSyslogは受信できる状態になった。
※TCPのSyslogもInputs画面の「Select input」のプルダウンリストより「Syslog TCP」を選び同じようなInput設定をすれば良い。
※稀に受信がうまくいかないことがあるようで、その場合は「Raw/Plaintext TCP」や「Raw/Plaintext UDP」でInput設定をすると良い。
syslog受信確認1(PortQryUI使用)
・ダミーパケットを生成
MS公式ツールのPortQryUIを使って、syslogダミーパケットを生成
・Graylogダッシュボードでsyslogダミーパケットを表示できていることを確認
syslog受信確認2(Rsyslog Windows Agent使用)
Rsyslog Windows Agentを使用してWindowsイベントをSyslogで飛ばしてみる。
インストール後の設定は以下のとおり。設定後にStartボタンを押せばSyslog送信開始。
①Syslog Tartget Options
・Syslog ServerはGraylogサーバのIPアドレス、Syslog UDPは「514」と入力
②Syslog Message Options
・Protocol Typeは「UDP」を指定
・Output Encodingは「Unicode(UTF8)」を指定
チューニング手順
Graylog JVMヒープ変更
Graylogは収集ログが増えるとJVM(JAVA仮想マシン)のヒープ領域が不足してパフォーマンスが悪くなる。必要に応じてメモリ領域を増やしてJVMヒープ領域も変更してあげる必要がある。(基本は割り当てメモリの半分。例えばメモリ4GBならJVMヒープ領域は2GBが望ましい。)
※こちらの記事を参考にしました。
以下コマンドでGraylogのJVMヒープ設定ファイル編集
$ sudo vi /etc/default/graylog-server
# 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
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は実稼働での使用を目的としておらず、あくまで検証目的であるというコメントも見受けられた。。
とは言っても、ディスクサイズ拡張をすれば良いとのことなので以下手順で問題なくできた。
※こちらの記事①、[記事②] (https://www.programmersought.com/article/97267926429/)を参考にしました。
①現在のパーティション状態を表示
$ 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.2→v4.3はこの手順で問題なかった)
①サービス停止
$ sudo systemctl stop graylog-server.service
②アップデート&インストール
▼リポジトリから最新パッケージをインストールする場合(以下例はv4.3の最新レポジトリ指定でインストール)
$ wget https://packages.graylog2.org/repo/packages/graylog-4.3-repository_latest.deb
$ sudo dpkg -i graylog-4.3-repository_latest.deb
& sudo apt-get update && sudo apt-get install graylog-server
▼指定バージョンでバージョンアップする場合(以下例はv4.3.15指定でホームディレクトリにパッケージをダウンロードしてインストール)
$ wget https://packages.graylog2.org/repo/debian/pool/stable/4.3/g/graylog-server/graylog-server_4.3.15-1_all.deb
$ sudo dpkg -i graylog-server_4.3.15-1_all.deb
(参考)v4.3のパッチバージョン置き場URL
https://packages.graylog2.org/debian/pool/stable/4.3/g/graylog-server
インストール時に「server.conf」を上書きして良いかというメッセージが出るが「No」を選択すること。
デフォルト「Yes」を選択してしまうと、adminアカウントのデフォルトパスワード再設定等が必要になる。
③サービス再開
$ sudo systemctl start graylog-server.service
他パッケージも一括アップデートする場合は以下コマンドを実行 ※こちらの記事を参考にしました。
$ sudo apt update && sudo apt -y upgrade && sudo apt -y dist-upgrade && sudo apt -y autoremove && sudo apt -y autoclean
(参考)Graylogダッシュボードのログ検索で何も表示されない事象例と対処方法
Graylogのディスク領域が100%になるとインデクサーの破損が起きて、ログ検索しても何も表示されなくなる事象が起きることがある。
本事象が起きた場合は以下手順でジャーナルログをすべて削除する。
※こちらの記事を参考にしました。
▼最初にGraylogサービス停止
$ sudo systemctl stop graylog-server.service
▼ジャーナルログをすべて削除
$ cd /var/lib/graylog-server/journal/
$ sudo rm -rf * .[a-z]*
上記を試しても検索表示に変化がない状態が継続する場合、ElasticsearchのIndexデータが破損している可能性が高い。
この場合、最終手段であるElasticsearchの全Indexデータの抹消してしまうのが最善。
※こちらの記事を参考にしました。
※抹消してはまずい重要なログがある場合、本手順は実施せず別手段での復旧を試みること!
▼Indexデータ容量の事前確認
$ sudo curl -XGET http://localhost:9200/_cat/indices
▼全Indexデータを削除 ※過去ログがすべて抹消されるので注意!
$ sudo curl -XDELETE http://localhost:9200/graylog_*
$ sudo curl -XDELETE http://localhost:9200/gl_*
▼Indexデータ容量の事後確認
$ sudo curl -XGET http://localhost:9200/_cat/indices
▼最後にGraylogサービス再開
$ sudo systemctl start graylog-server.service
他トラブルは以下URL記事が参考になる。
https://megamorf.gitlab.io/2021/01/20/graylog-and-elasticsearch-troubleshooting/