はじめに
各サーバ・ネットワーク機器に入ってログ見るの面倒だなと思って、rsyslogサーバでログを受信しはじめました。
そうして今度はrsyslogサーバにログインしてログを見るのも面倒だなと思った。Webでぽちぽちアクセスして見られるようにしたいなということでOSS探したら、Grafana Loki というストレージにあるログファイル参照するだけで、専用のデータベースもいらないお手軽そうなものを見つけました。
とりあえず触ってみるか。そんな人向けにとりあえず構築メモ。
前提
・Intel CPU 64bit
・CentOS 7.8
・rsyslog ※ここでは /var/log/messages ファイルを可視化
・Grafana
・Grafana Loki v1.5.0
・Promtail v1.5.0
(この記事の対象)
・OS Grafana Loki向けの設定
・Grafana インストール&初期設定 ※yumで最新版をインストール。私の時は v7.0.1。
・Grafana Loki v1.5.0 インストール&初期設定
・Promtail v1.5.0 インストール&初期設定
設定ファイルの配置場所: /opt/loki/etc/
ソース配置場所: /opt/loki/src/
パッケージの超概要
・Grafana: 可視化。GUI画面を提供。
・Grafana Loki: ログ用のインメモリデータベース。
・Promtail: 指定したログファイルの内容をLokiに渡す人。
OS Grafana Loki向けの設定
・UTF-8を設定
localectl set-locale LANG=en_US.UTF-8
・設定ファイルの配置ディレクトリ作成
mkdir -p /opt/loki/etc/
・ソースの配置ディレクトリ作成
mkdir -p /opt/loki/src/
※iptables/firewalld、selinux など検証にいらないものはオフにするか通信を許可する。
grafana画面へのアクセス 3000/tcp のインバウンドを許可する必要がある。
あとは3100/tcp、9080/tcpなどlistenされるがローカルホスト内での通信の模様。
Grafana インストール&初期設定
・yumでインストール
vi /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
yum install grafana
・サービス起動&自動起動設定
systemctl start grafana-server.service
systemctl enable grafana-server.service
Grafana Loki v1.5.0 インストール&初期設定
・ディレクトリ移動
cd /opt/loki/src/
・ソースダウンロード、配置
curl -O -L "https://github.com/grafana/loki/releases/download/v1.5.0/loki-linux-amd64.zip"
unzip loki-linux-amd64.zip
chmod a+x loki-linux-amd64
mv loki-linux-amd64 loki
・設定ファイル作成、初期設定値の投入
vi /opt/loki/etc/loki.yaml
auth_enabled: false
server:
http_listen_port: 3100
ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 5m
chunk_retain_period: 30s
schema_config:
configs:
- from: 2020-05-15
store: boltdb
object_store: filesystem
schema: v11
index:
prefix: index_
period: 168h
storage_config:
boltdb:
directory: /tmp/loki/index
filesystem:
directory: /tmp/loki/chunks
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
・サービス登録&起動&自動起動設定
vi /etc/systemd/system/loki.service
[Unit]
Description=Grafana Loki
Documentation=https://github.com/grafana/loki
After=network-online.target
[Service]
User=root
Restart=always
ExecStart=/opt/loki/src/loki --config.file=/opt/loki/etc/loki.yaml
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start loki
systemctl enable loki
Promtail v1.5.0 インストール&初期設定
・ディレクトリ移動
cd /opt/loki/src/
・ソースダウンロード、配置
curl -O -L "https://github.com/grafana/loki/releases/download/v1.5.0/promtail-linux-amd64.zip"
unzip promtail-linux-amd64.zip
mv promtail-linux-amd64 promtail
chmod a+x promtail
・設定ファイル作成、初期設定値
vi /opt/loki/etc/promtail.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://localhost:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: rsyslog-systemlog
__path__: /var/log/messages
・サービス登録&起動&自動起動設定
vi /etc/systemd/system/promtail.service
[Unit]
Description=Grafana Loki promtail
Documentation=https://github.com/grafana/loki
After=network-online.target
[Service]
User=root
Restart=always
ExecStart=/opt/loki/src/promtail --config.file=/opt/loki/etc/promtail.yaml
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start promtail
systemctl enable promtail
Grafana 設定
・管理画面にアクセスして
http://[Server IP address]:3000/
・データソースを指定
左のメニューから[Data Sources]で画面を移動し、[add data source] をクリック
・次のパラメータを入力して、[Save&Test]をクリック
URL: http://localhost:3100
適当にログを吐かせてログ画面を確認
左のメニューから[Explore]をクリック
※キーワードで引っ掛けているのか知らないですがエラーログは赤くなるみたいです。
触ってみた感想
(良い点)
・インストールしやすくてなんとなくログが可視化できて、リアルタイムでも見られて良い感じ
・リソース負荷が少ない
・アーキテクチャが素晴らしい。可視化で色々やっているLokiが多少おかしなことになったとしてもrsyslogをしっかりと設計検証しておけばログデータをロスすることはない(はず)。
・promtail の設定ファイルにあるscrape_configsのターゲットを複数登録したり、正規表現で複数ファイルをまとめて一つのラベルで可視化することができるので良い感じ
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: local-systemlog
__path__: /var/log/syslog/127.0.0.1/*
- targets:
- localhost
labels:
job: group01-systemlog
__path__: /var/log/syslog/192.168.0.{1,2,3}/*
(今後に期待・その他)
・受信したsyslogメッセージをrsyslogで保存する場所とログローテートが考えどころかもしれない。
・少量のログは見られるが、通常のログ解析で必要になるログ量を見るのにはまだ向いていない。
Grafanaの設定でデフォルト1,000で最大5,000ログ同時表示できるみたいだが、値を大きくすると反応が悪い時がある。 ※最大の5,000でも少なすぎる。
・おそらくログアラートのためにprometheusが必要。