今回はOpenObserveを構築してFluentdでsyslogの転送してみます。
OpenObserveはdocker composeを使って構築します。
環境
OS:Ubuntu22.04 LTS
OpenObserveとは
ログ、メトリクス、トレースの監視ができるOSSプラットフォームである。S3,GCS,minio,Azure Blobなどのストレージサービスとの互換性がある。ストレージコストをElasticsearchの約140分の1に削減できるらしい
詳しくは公式サイトへ
OpenObserveの構築
$ mkdir openobserve
$ vim compose.yaml
services:
app:
image: public.ecr.aws/zinclabs/openobserve:latest
ports:
- 5080:5080
volumes:
- ./data:/data
environment:
- ZO_DATA_DIR=/data
- ZO_ROOT_USER_EMAIL=root@example.com
- ZO_ROOT_USER_PASSWORD=Complexpass#123
EMAILとPASSWORDはログイン時に必要なので各自置き換えて下さ。
$ docker compose up -d
Fluentdとは
OSSのデータコレクターやデータログ収集ツールです。
ログファイルを収集、転送、保存など行うことが可能です。
データをElasticsearchやS3に出力可能ですが今回はOpenOvserveに出力します。またtd-agentと呼ばれるFluentdの安定版を利用していきます。
詳しくは公式サイトで
Fluentdのインストール
step1 AptリポジトリからFluentdのインストール
Ubuntu22.04を使っているので Ubuntu Jammyを選択する
# td-agent 4 (experimental)
curl -fsSL https://toolbelt.treasuredata.com/sh/install-ubuntu-jammy-td-agent4.sh | sh
step2 デーモン起動
$ sudo systemctl start td-agent.service
$ sudo systemctl status td-agent.service
● td-agent.service - td-agent: Fluentd based data collector for Treasure Data
Loaded: loaded (/lib/systemd/system/td-agent.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2023-08-18 17:25:12 UTC; 18s ago
Docs: https://docs.treasuredata.com/display/public/PD/About+Treasure+Data%27s+Server-Side+Agent
Process: 1541975 ExecStart=/opt/td-agent/bin/fluentd --log $TD_AGENT_LOG_FILE --daemon /var/run/td-agent/td-agent.p>
Main PID: 1541981 (fluentd)
Tasks: 9 (limit: 2142)
Memory: 96.1M
CPU: 638ms
CGroup: /system.slice/td-agent.service
├─1541981 /opt/td-agent/bin/ruby /opt/td-agent/bin/fluentd --log /var/log/td-agent/td-agent.log --daemon />
└─1541984 /opt/td-agent/bin/ruby -Eascii-8bit:ascii-8bit /opt/td-agent/bin/fluentd --log /var/log/td-agent>
Fluentdの設定
インストールは完了したのでOpenObserveにsyslog転送する設定を行っていきます。
OpenObserveからFluentdの設定情報を取得
http://localhost:5080 にアクセスしてFluentdの設定ファイルのサンプルをコピーしておきます。
td-agent.confの書き換え
Fluentdの設定ファイルのサンプルをコピーしたらtd-agent.confに追記していきます。
sudo vi /etc/td-agent/td-agent.conf
<source>
@type tail
format none
path /var/log/syslog
pos_file /var/log/syslog/syslog.pos
tag syslog
</source>
<match syslog>
@type http
endpoint http://10.0.0.5:5080/api/default/default/_json
content_type json
json_array true
<auth>
method basic
username root@example.com
password 9dqQAW4ghtKK76kR
</auth>
</match>
<match>
内のendpointやpasswordなどは適宜変えてください。
td-agentの再起動
td-agentのコンフィグを変えたときは再起動させて反映させます。
$ sudo systemctl restart td-agent.service
$ sudo systemctl status td-agent.service
● td-agent.service - td-agent: Fluentd based data collector for Treasure Data
Loaded: loaded (/lib/systemd/system/td-agent.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2023-08-18 17:44:57 UTC; 6s ago
Docs: https://docs.treasuredata.com/display/public/PD/About+Treasure+Data%27s+Server-Side+Agent
Process: 1545959 ExecStart=/opt/td-agent/bin/fluentd --log $TD_AGENT_LOG_FILE --daemon /var/run/td-agent/td-agent.p>
Main PID: 1545965 (fluentd)
Tasks: 5 (limit: 2142)
Memory: 47.0M
CPU: 2.980s
CGroup: /system.slice/td-agent.service
└─1545965 /opt/td-agent/bin/ruby /opt/td-agent/bin/fluentd --log /var/log/td-agent/td-agent.log --daemon />
Aug 18 17:44:57 ubuntu systemd[1]: td-agent.service: Deactivated successfully.
Aug 18 17:44:57 ubuntu systemd[1]: Stopped td-agent: Fluentd based data collector for Treasure Data.
Aug 18 17:44:57 ubuntu systemd[1]: td-agent.service: Consumed 1.948s CPU time.
Aug 18 17:44:57 ubuntu systemd[1]: Starting td-agent: Fluentd based data collector for Treasure Data...
Aug 18 17:44:57 ubuntu systemd[1]: Started td-agent: Fluentd based data collector for Treasure Data.
OpenObserveでログ確認
Fluentdの設定ができたのでWebで確認していきます。
ログが受け取れてないだと...
td-agentのログを確認
sudo tail -f /var/log/td-agent
~~一部抜粋~~
[error]: #0 unexpected error error_class=Errno::EACCES error="Permission denied @ rb_sysopen - /var/log/syslog.pos"
Permission deniedになってる。
色々調べるとtd-agentはsudoをつけてもrootで実行されてないみたい(参考サイト)。
なので以下のようにする。
sudo vi /usr/lib/systemd/system/td-agent.service
#User=td-agent
User=root
#Group=td-agent
Group=root
sudo systemctl daemon-reload
sudo systemctl restart td-agent.service
もう一度OpenObserveで確認
最後に
ログのformatを変えたり、OpenObserveのダッシュボードを作成したりできていないので、今後やっていきたい思ってます。