とりあえず構築 CentOS7 de Grafana Loki v1.5.0

## はじめに
各サーバ・ネットワーク機器に入ってログ見るの面倒だなと思って、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

```/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

```/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

```/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

```/opt/loki/etc/loki.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

```/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/

※初期パスワードは admin/admin 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636347/2acf5548-964f-44b6-5b5a-50b69d0ff04d.png)

・データソースを指定
左のメニューから[Data Sources]で画面を移動し、[add data source] をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636347/8db52749-a606-c03d-fe03-cb269736a647.png)

Lokiを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636347/175eb33b-e064-debd-3c50-109057aa6461.png)

・次のパラメータを入力して、[Save&Test]をクリック
URL： http://localhost:3100

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636347/edef61f3-9983-d43e-260d-39d7f0bfc7cb.png)

これでOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636347/8e055716-c5fe-58e5-002c-d41b8f70bd66.png)

## 適当にログを吐かせてログ画面を確認
左のメニューから[Explore]をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636347/62bfde03-ff1e-f2a6-9d1f-7a9af7dc066f.png)

※キーワードで引っ掛けているのか知らないですがエラーログは赤くなるみたいです。

## 触ってみた感想
（良い点）
・インストールしやすくてなんとなくログが可視化できて、リアルタイムでも見られて良い感じ
・リソース負荷が少ない
・アーキテクチャが素晴らしい。可視化で色々やっているLokiが多少おかしなことになったとしてもrsyslogをしっかりと設計検証しておけばログデータをロスすることはない（はず）。
・promtail の設定ファイルにあるscrape_configsのターゲットを複数登録したり、正規表現で複数ファイルをまとめて一つのラベルで可視化することができるので良い感じ

```/opt/loki/etc/promtail.yaml
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が必要。