Raspberry Pi 構築 サーバー監視編
サーバーの監視を行いたい
自分以外に友人を招待してMisskeyなどのサービスを提供しているのでサーバーが落ちたり
データが消失したりしてはいけないのでサーバーに不審なログが出ていないか
アクセス数やメモリ、ストレージの容量が足りているかを確認する必要が出てきた
サーバーの監視を行うサービスについて
「Prometheus」クエリを発行して起動しているサービスの監視ができる
「Node Exporter」マシン上で実行される個別のプロセスやサービスではなく、マシン自体のモニタリングができる
「cAdvisor」Dockerなどのコンテナの状況を監視できる
「Grafana」取得してきたログの数値などをグラフなどにして可視化する事ができる
Grafana & Prometheus & NodeExporter & cAdvisor構築
追記:docker-compose.yml
prometheus:
image: prom/prometheus
volumes:
- ./data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- 9090:9090
restart: always
node-exporter:
image: quay.io/prometheus/node-exporter
ports:
- 9100:9100
volumes:
- /proc:/host/proc
- /sys:/host/sys
- ./rootfs:/rootfs
cadvisor:
image: gcr.io/cadvisor/cadvisor:v0.47.2
container_name: cadvisor
ports:
- 8080:8080
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
depends_on:
- redis
grafana:
image: grafana/grafana:7.5.9
container_name: grafana
hostname: grafana
user: "0:"
volumes:
- ./data/grafana/grafana_data:/var/lib/grafana
ports:
- 15200:3000
env_file:
- ./data/grafana/grafana.env
restart: always
redis:
image: redis:latest
container_name: redis
ports:
- 6379:6379
新規:prometheus.yml
global:
scrape_interval: 15s # デフォルトの監視対象にpullする間隔
external_labels: # 外部と通信するときのラベル
monitor: 'codelab-monitor'
scrape_configs: # 監視対象ごとの設定
- job_name: 'prometheus' # Prometheus自身の監視
scrape_interval: 5s # デフォルトの間隔を上書き
static_configs:
#- targets: ['localhost:9090']
- targets: ['192.168.x.xx:9090'] # prometheusを立てる環境によってURLを変える
- job_name: 'node'
static_configs:
#- targets: ['localhost:9100']
- targets: ['192.168.x.xx:9100'] # nodeを立てる環境によってURLを変える
- job_name: cadvisor
scrape_interval: 5s
static_configs:
#- targets: ['localhost:8080']
- targets: ['192.168.x.xx:8080'] # cadvisorを立てる環境によってURLを変える
新規:grafana.env
GF_SERVER_DOMAIN=localhost
# 環境によって変える
GF_SERVER_HTTP_PORT=3000
GF_SERVER_PROTOCOL=http
# https://example.com/grafana のようにサブディレクトリを切る場合
GF_SERVER_ROOT_URL=/
他のポートに被らないようにする
Grafanaの3000番ポートは私の場合
Misskeyサーバーで使用しているため別のポートから転送してあげる必要があった
cAdvisorを入れる際に苦労したこと
cAdvisorをDockerで立ち上げようとした時に以下のエラーを吐かれた
failed to get docker info: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
その後いろいろ調べていったところプロセッサの問題そうであった
やったこと
参考にした記事ではバージョンを指定していなかったが
Raspberry PiなどのARM系のマイクロプロセッサの場合はうまく動作せずにコンテナが立ち上がらない
ARMに対応していない記事が出てきたが過去のものであまり参考にならなかったが
最新バージョンであれば対応しているような内容を見つけた
イメージはこのように指定すれば行けた
image: gcr.io/cadvisor/cadvisor:v0.47.2
Grafanaを入れる時に苦労したこと
DockerでGrafanaを入れようとした際に以下のログが確認できた
You may have issues with file permissions, more information here: http://docs.grafana.org/installation/docker/#migrate-to-v51-or-later
Grafanaのプロセスが自身の/var/lib/にアクセスする際に権限を持っていなかったことが問題
docker-compose.ymlのGrafanaのuserを設定する必要があった
user: “$PID:$GID”
起動後のカスタマイズについて
とりあえず見たいものをPickupして監視することにした(間違った内容のものがあるかもしれないです)
コンテナ単位でのネットワークの受信バイト数の合計: rate(container_network_receive_bytes_total[5m])
コンテナ単位でのCPU使用率: rate(container_cpu_system_seconds_total[5m])
本体の残りストレージ残量: node_filesystem_free_bytes
本体の使用メモリー量: node_memory_MemFree_bytes
MisskeyサーバーのCPU使用率: rate(container_cpu_usage_seconds_total[5m])
Misskeyサーバーのメモリ使用率: container_memory_usage_bytes
*この記事はService分けまでしてくれているのでどの機能を使ってるかわかりやすい