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でログを参照する際に支障がある。
$ sudo timedatectl set-timezone Asia/Tokyo
インストール
まずはオンプレ志向で、インストールタイプはLocalで行ってみよう。ストレージもすべてローカルのFileSystemで。
https://grafana.com/docs/loki/latest/installation/local/
DockerイメージとBinaryの2つが提供されているが、今日びDockerなんて使うわけねーし。Binaryでインストール。
https://github.com/grafana/loki/releases/
$ 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"
構成する
以下の2つのyamlファイルをダウンロードする。
$ 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を起動する。
ハイフン2つ使わないオプション指定は今時珍しい。
$ ./loki-linux-amd64 -config.file=loki-local-config.yaml
起動すると、goのものっぽいログがずらずらと出力される。「msg="Loki started"」と表示されればとりあえずOKかな?
Lokiにログを送り付ける
Lokiを起動したのとは別のsshセッションを開いて、次はpromtailを起動する。
先にダウンロードしたpromtail-local-config.yamlをそのまま使うのであれば、/var/log/*logのログファイルがそのままLokiに流れるはず。
$ ./promtail-linux-amd64 -config.file=promtail-local-config.yaml
またぞろgoのログがずらずらと出力される。「msg="tail routine: started"」と、ログファイルのモニターがいくつか開始されているならOKだろう。
ログを見る
Grafanaがいるのかよ。そりゃそうか。しかし面倒。。
いろいろ端折るが、新しいsshセッションを開き、Grafana(OSS版)をインストールして起動する。
なお、記事作成時点でインストールされたGrafanaはV8.5.0。
$ 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のすべてを1台のサーバー上で起動しているならサンプルで表示されている「http://localhost:3100
」を使用するので良いだろう。
https://grafana.com/docs/loki/latest/getting-started/grafana/
ログを見るには、ダッシュボードを使うわけではなく、左メニューから「Explore」>「Loki」である。
Log browserから「job(1)」>「verlogs」を選択して「Show logs」クリックするとLokiに集まってきたログが表示される。
画面右上の「Live」をクリックするとリアルタイムで収集したログが表示されるようになる。
sshセッションでsyslogにhelloと書き込んでみる。
$ logger hello
少し後、Grafanaの画面一番下に「hello」のログが表示されることが確認できる。
その他
上記一通りやった後で、OSのtopコマンドの出力結果は以下の通り。時間がたつとどうなるかはわからないが、1~2時間動かしてみる分には512MBのマシンでも全然動くし軽い。なるほど人気となるわけだ・・?
systemdでLokiとPromtailを起動
簡単に、LokiとPromtailをsystemdで起動するには以下。
ちなみに、Lokiのプロセスを再起動するとGrafanaのLiveモニタは再起動後のログを読んでくれなくなる。Exit live modeして再度Liveを再開すれば良いのだが。
$ 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