Grafanaのメモ
目次
はじめに
Grafanaとは、OSSでダッシュボードを作成できるツールです。
様々なデータを取得し、情報をダッシュボードにまとめることができます。
今回は、下記の情報をダッシュボードにまとめてみます。
- ディスク使用率
- メモリ使用率
- CPU使用率
- WebのStatusごとの件数
サーバの情報を取得するために、PrometheusとExporterを利用します。
PrometheusがExporterにアクセスし、Exporterでメトリクスを取得します。
Webのリクエスト件数は、Nginxのログから取得します。
そのため、PromtailとLokiを利用します。
Dockerを利用したい場合は、それぞれ下記のイメージが利用できます。
Dockerが入っていない場合は、Dockerインストールを参照ください。
- grafana: grafana/grafana
- prometheus: prom/prometheus
- node exporter: prom/node-exporter
Exporterのインストール
下記コマンドでnode exporterをダウンロードし、起動します。
exporterはポート9100で起動します。
# node exporterのダウンロード
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-arm64.tar.gz
# 解凍
tar zxvf node_exporter-1.7.0.linux-arm64.tar.gz
# ディレクトリに移動
cd ../node_exporter-1.7.0.linux-arm64/
# portを指定して起動
./node_exporter
Prometheusのインストール
下記コマンドでprometheusをダウンロードし、起動します。
prometheusはポート9090で起動します。
# prometheusのダウンロード
wget https://github.com/prometheus/prometheus/releases/download/v2.49.1/prometheus-2.49.1.linux-arm64.tar.gz
# 解凍
tar zxvf prometheus-2.49.1.linux-arm64.tar.gz
# ディレクトリに移動
cd prometheus-2.49.1.linux-arm64/
# exporterを追加
vim prometheus.yml
# 起動
./prometheus
prometheus.ymlを修正し、node exporterを追加します。
scrape_configs:
- job_name: "prometheus"
static_configs:
# xxx.xxx.xxx.xxxはprometheusのIPアドレスです
- targets: ["xxx.xxx.xxx.xxx:9090"]
- job_name: "node"
static_configs:
# yyy.yyy.yyy.yyyはexporterのIPアドレスです
- targets: ["xxx.xxx.xxx.xxx:9100"]
Grafanaのインストール
下記コマンドでgrafanaをインストールし、起動します。
grafanaはポート3000で起動します。
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor > /etc/apt/keyrings/grafana.gpg
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | tee /etc/apt/sources.list.d/grafana.list
apt install grafana
ダッシュボードの作成
GrafanaのDashboardsの右上にあるNewボタンから新しいダッシュボードを作成します。
次に、作成したダッシュボードからAdd Visualizationから新しいパネルを追加します。
Disk容量
Data sourceには、prometheusを指定します。
Queryは下記を指定します。
(node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes * 100
node_filesystem_size_bytes
は、利用中の容量。node_filesystem_avail_bytes
は、利用可能な容量です。
上記のQueryでRun queries
を実行するとグラフを確認できます。
CPU容量
Disk容量と同様に下記のQueryで結果が得られます。
avg(rate(node_cpu_seconds_total{mode="idle"}[1m])) * -100 + 100
Memory容量
Disk容量と同様に下記のQueryで結果が得られます。
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100
PromtailとLokiのインストール
Promtailは、Lokiにログを転送するエージェントです。
そして、Lokiがログを保存・処理します。
下記コマンドでLokiとPromtailをインストールし、起動します。
apt install loki promtail
Promtailで送信する対象を/etc/promtail/config.yml
に記載します。
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: nginx
static_configs:
- targets:
- localhost
labels:
job: nginx
__path__: /var/log/nginx/*.log
pipeline_stages:
- regex:
expression: '^(?P<ip>.*?) - - \[(?P<date>.*?) (?P<timezone>.*?)\] \"(?P<method>.*?) (?P<path>.*?) (?P<version>.*?)\" (?P<status>.*?) (?P<length>.*?) \"(?P<referrer>.*?)\" \"(?P<user_agent>.*?)\"$'
- labels:
ip:
date:
timezone:
method:
path:
version:
status:
length:
referrer:
user_agent:
Lokiの設定は、/etc/loki/config.yml
に記載されています。
どこにログを格納するのか等決定することができます。
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
instance_addr: 127.0.0.1
path_prefix: /tmp/loki
storage:
filesystem:
chunks_directory: /tmp/loki/chunks
rules_directory: /tmp/loki/rules
replication_factor: 1
ring:
kvstore:
store: inmemory
query_range:
results_cache:
cache:
embedded_cache:
enabled: true
max_size_mb: 100
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
ruler:
alertmanager_url: http://localhost:9093
limits_config:
retention_period: 168h
リクエスト数は、下記のQueryで結果が得られます。
sum(count_over_time({filename="/var/log/nginx/access.log"} | status != "" [$__auto])) by (status)