FluentdとOpenObserveを使ってログを集めてみる

今回はOpenObserveを構築してFluentdでsyslogの転送してみます。
OpenObserveはdocker composeを使って構築します。

## 環境
OS：Ubuntu22.04 LTS


# OpenObserveとは
ログ、メトリクス、トレースの監視ができるOSSプラットフォームである。S3,GCS,minio,Azure Blobなどのストレージサービスとの互換性がある。**ストレージコストをElasticsearchの約140分の1に削減できるらしい:expressionless:**

詳しくは[公式サイト](https://openobserve.ai)へ

# OpenObserveの構築
[こちらのquicstartを参考に構築していきます](https://openobserve.ai/docs/guide/quickstart/#self-hosted-installation)
```bash
$ mkdir openobserve
$ vim compose.yaml
```

```yaml: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はログイン時に必要なので各自置き換えて下さ。

```bash
$ docker compose up -d
```

# Fluentdとは
OSSのデータコレクターやデータログ収集ツールです。
ログファイルを収集、転送、保存など行うことが可能です。
データをElasticsearchやS3に出力可能ですが今回はOpenOvserveに出力します。またtd-agentと呼ばれるFluentdの安定版を利用していきます。

詳しくは[公式サイト](https://www.fluentd.org/architecture)で
# Fluentdのインストール
### step1 AptリポジトリからFluentdのインストール
Ubuntu22.04を使っているので Ubuntu Jammyを選択する
```bash
# td-agent 4 (experimental)
curl -fsSL https://toolbelt.treasuredata.com/sh/install-ubuntu-jammy-td-agent4.sh | sh
```

### step2 デーモン起動
```bash
$ 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の設定ファイルのサンプルをコピーしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613684/3604da6f-48a5-22f4-0958-a73e8765ca41.png)


## td-agent.confの書き換え
Fluentdの設定ファイルのサンプルをコピーしたらtd-agent.confに追記していきます。
```bash
sudo vi /etc/td-agent/td-agent.conf
```
```conf:/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のコンフィグを変えたときは再起動させて反映させます。
```bash
$ 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で確認していきます。
![2023-08-19 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613684/28140648-d83a-dcb1-7e2d-0e21e5f38e66.png)
ログが受け取れてないだと...

## td-agentのログを確認
```bash
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で実行されてないみたい([参考サイト](https://qiita.com/katuemon/items/7105c24271c07ce7b412))。
なので以下のようにする。
```bash
sudo vi /usr/lib/systemd/system/td-agent.service
```
```bash:td-agent.service
#User=td-agent
User=root
#Group=td-agent
Group=root
```
```bash
sudo systemctl daemon-reload
sudo systemctl restart td-agent.service
```

# もう一度OpenObserveで確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613684/4c5ae41a-9efa-0b9d-aad7-10c4b1932bfd.png)
データが送れてる！

# 最後に
ログのformatを変えたり、OpenObserveのダッシュボードを作成したりできていないので、今後やっていきたい思ってます。