Grafana Lokiを試してみる

Elastic Searchとかもう勘弁だ、と思うオンプレ運用管理者の間で、代替としてGrafana Loki使えないの？と言う向きが増えており、とりあえず試してみようと思ったメモ。

# 環境
必要メモリ量とかあるのかねと思ったが、特になさそう。まあ自分で使って決めてねという事だろう。
https://grafana.com/docs/loki/latest/installation/

とりあえずAWS Lightsailの一番安いやつ(月$3.5)で、OSはUbuntu 20.04 LTSで。
オンプレとの親和性でCentOS 8を使いたかったが、もうサポートが切れているらしくyum install unzipが失敗する。

OSが起動したらTime ZoneはAsia/Tokyoにしておく。UTCのままだとGrafanaでログを参照する際に支障がある。

```bash
$ sudo timedatectl set-timezone Asia/Tokyo
```


# インストール
まずはオンプレ志向で、インストールタイプはLocalで行ってみよう。ストレージもすべてローカルのFileSystemで。
https://grafana.com/docs/loki/latest/installation/local/

DockerイメージとBinaryの２つが提供されているが、今日びDockerなんて使うわけねーし。Binaryでインストール。
https://github.com/grafana/loki/releases/

```bash
$ sudo apt install unzip
$ curl -O -L "https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip"
$ unzip "loki-linux-amd64.zip"
$ chmod a+x "loki-linux-amd64"
$ curl -O -L "https://github.com/grafana/loki/releases/download/v2.5.0/promtail-linux-amd64.zip"
$ unzip "promtail-linux-amd64.zip"
$ chmod a+x "promtail-linux-amd64"
```

# 構成する
以下の２つのyamlファイルをダウンロードする。

```bash
$ wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
$ wget https://raw.githubusercontent.com/grafana/loki/main/clients/cmd/promtail/promtail-local-config.yaml
```

とりあえずダウンロードしたyamlファイルはfilesystemを使用するようにあらかじめ設定済みなので、そのまま使用。

# Lokiを起動する
とりあえずLokiを起動する。
ハイフン２つ使わないオプション指定は今時珍しい。

```bash
$ ./loki-linux-amd64 -config.file=loki-local-config.yaml
```

起動すると、goのものっぽいログがずらずらと出力される。「msg="Loki started"」と表示されればとりあえずOKかな？

# Lokiにログを送り付ける
https://grafana.com/docs/loki/latest/getting-started/get-logs-into-loki/

Lokiを起動したのとは別のsshセッションを開いて、次はpromtailを起動する。
先にダウンロードしたpromtail-local-config.yamlをそのまま使うのであれば、/var/log/*logのログファイルがそのままLokiに流れるはず。

```bash
$ ./promtail-linux-amd64 -config.file=promtail-local-config.yaml
```

またぞろgoのログがずらずらと出力される。「msg="tail routine: started"」と、ログファイルのモニターがいくつか開始されているならOKだろう。

# ログを見る
Grafanaがいるのかよ。そりゃそうか。しかし面倒。。
いろいろ端折るが、新しいsshセッションを開き、Grafana(OSS版)をインストールして起動する。
なお、記事作成時点でインストールされたGrafanaはV8.5.0。

https://grafana.com/docs/grafana/latest/installation/

```bash
$ sudo apt-get install -y apt-transport-https
$ sudo apt-get install -y software-properties-common wget
$ wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
$ echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
$ sudo apt-get update
$ sudo apt-get install grafana
$ sudo systemctl daemon-reload
$ sudo systemctl start grafana-server
$ sudo systemctl status grafana-server
```

起動後、AWS Lightsailのファイアウォールでtcp/3000ポートを開けてGrafanaにログインする。
デフォルトの初期ユーザー名/パスワードは admin/admin。

Grafanaにadminでログイン後、ConfigurationのData sourcesでLokiを追加する。
Loki, Grafanaのすべてを１台のサーバー上で起動しているならサンプルで表示されている「`http://localhost:3100`」を使用するので良いだろう。
https://grafana.com/docs/loki/latest/getting-started/grafana/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/57abd05c-0e90-5b59-7db3-470a650db594.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/68ffb7e7-d8d2-0666-87a0-d1323c8bbc5d.png)

ログを見るには、ダッシュボードを使うわけではなく、左メニューから「Explore」>「Loki」である。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/aeef8432-ade5-3853-9172-a8bbdc2259a2.png)

Log browserから「job(1)」>「verlogs」を選択して「Show logs」クリックするとLokiに集まってきたログが表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/1b595b9c-da89-4ede-38a2-28744ca64e93.png)

画面右上の「Live」をクリックするとリアルタイムで収集したログが表示されるようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/503bc15f-51c2-1527-6a9e-792274005c71.png)

sshセッションでsyslogにhelloと書き込んでみる。

```bash
$ logger hello
```

少し後、Grafanaの画面一番下に「hello」のログが表示されることが確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/dfb7c916-5eaa-ad95-f24d-f3fdb9c30805.png)

# その他
上記一通りやった後で、OSのtopコマンドの出力結果は以下の通り。時間がたつとどうなるかはわからないが、１～２時間動かしてみる分には512MBのマシンでも全然動くし軽い。なるほど人気となるわけだ・・？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/75930a09-66a2-55a5-643f-dc54ac80349b.png)

## systemdでLokiとPromtailを起動
簡単に、LokiとPromtailをsystemdで起動するには以下。
ちなみに、Lokiのプロセスを再起動するとGrafanaのLiveモニタは再起動後のログを読んでくれなくなる。Exit live modeして再度Liveを再開すれば良いのだが。

```bash
$ sudo cp ./loki-linux-amd64 /usr/local/bin/loki
$ sudo cp ./loki-local-config.yaml /etc/
$ sudo cp ./promtail-linux-amd64 /usr/local/bin/promtail
$ sudo cp ./promtail-local-config.yaml /etc/
$ cat > loki.service << EOF
[Unit]
Description=loki
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/loki -config.file=/etc/loki-local-config.yaml
Restart=always

[Install]
WantedBy=multi-user.target
EOF
$ sudo cp loki.service /etc/systemd/system/
$ cat > promtail.service << EOF
[Unit]
Description=promtail

[Service]
ExecStart=/usr/local/bin/promtail -config.file=/etc/promtail-local-config.yaml
Restart=always

[Install]
WantedBy=multi-user.target
EOF
$ sudo cp promtail.service /etc/systemd/system/
$ sudo systemctl daemon-reload
$ sudo systemctl start loki
$ sudo systemctl enable loki
$ sudo systemctl start promtail
$ sudo systemctl enable promtail
```