はじめに

twitterにてIntel N100を積んだ中華mini PCが手頃な価格で手に入ると知り、ネットワークや仮想基盤のお勉強と、好き勝手作って壊せるLinux VM環境が欲しくなっていた自分に刺さったので購入することに。
どうせ仮想基盤や仮想マシンを作るのであれば、自宅ネットワークのオブザーバビリティのためにPrometheusをインストールしようと思いったった。

0. 購入したPC

BeeLink S12 Pro

  • Intel N100
  • RAM 16GB
  • M.2 PCIe SSD 512GB
  • Windows 11 Pro

https://www.bee-link.com/beelink-mini-s12-pro-n100-mini-pc-clone-1

1. Proxmoxのインストール

USBにRufasなどでProxmox VEのISOを焼きインストールする。

https://www.proxmox.com/en/proxmox-virtual-environment/get-started

インストール後にWeb GUIを開き、ノードの管理からコンポーネントが「enterprise」となっている2つのリポジトリを無効化し、追加から「No-Subscription」のリポジトリを追加しアップデートする。
Proxmox VEがDebianベースらしく、シェルから apt update コマンドを叩けるのは便利

2. Prometheus用の仮想マシンの作成

Ubuntu Server 22.04のisoをインストールし、ノード > local > ISO からISOをノードにアップロードする。
https://ubuntu.com/download/server

VMを作成からUbuntuをインストール

3. Prometheusをインストール

DockerコンテナにてPrometheusを起動する
Dockerのdocsを参考にdockerやdocker composeをインストールする。
https://docs.docker.com/engine/install/ubuntu/

公式ドキュメントなどを参考にdocker-compose.ymlファイルを作成する。
docker imageは、quay.io かdocker hubから
https://quay.io/repository/prometheus/prometheus
https://hub.docker.com/r/prom/prometheus/

docker-compose.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
version: '3.8'

networks:
  monitoring:
    driver: bridge

volumes:
  prometheus_data: {}

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    restart: unless-stopped
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'
      - '--web.enable-lifecycle'
    ports:
      - 9090:9090
    networks:
      - monitoring

prometheus.yml を作成する。

1
2
3
4
5
6
7
8
global:
  scrape_interval: 1m

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 1m
    static_configs:
      - targets: ['localhost:9090']

コンテナをdocker compose up -dで起動する。

http://<hostname>:9090 にて接続できることを確認する。

4. Node Exporterを起動する

VMのメトリクスを収集するためにNode Exporterをコンテナにて起動する。

MONITORING LINUX HOST METRICS WITH THE NODE EXPORTER
https://prometheus.io/docs/guides/node-exporter/
prometheus/node_exporter
https://github.com/prometheus/node_exporter

docker-compose.yml に追記

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    restart: unless-stopped
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.rootfs=/rootfs'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
    ports:
      - 9100:9100
    networks:
      - monitoring

prometheus.yml に追記する。

1
2
3
  - job_name: 'node'
    static_configs:
      - targets: ['<hostname>:9100']

http://<hostname>:9090/targets にアクセスし、StateがUpであることを確認する。

5. Grafanaを起動する

Prometheusに収集したメトリクスをダッシュボードで確認したり、探索するためにGradanaを起動する。

Run Grafana Docker image
https://grafana.com/docs/grafana/latest/setup-grafana/installation/docker/

初回の構築時には外出先からでも確認できるマネージドサービスなGrafana Cloudの無料枠でメトリクスを収集していたが、無料枠10kメトリクスを2日程度で超過してしまったので、自宅サーバに構築する
Grafana Cloudを利用したい方は以下の記事を参考に

Monitoring a Linux host with Prometheus, Node Exporter, and Docker Compose
https://grafana.com/docs/grafana-cloud/send-data/metrics/metrics-prometheus/prometheus-config-examples/docker-compose-linux/

データソースの設定はGrafanaログイン後に行うため、docker-compose.ymlには記載しない。

docker-compose.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
volumes:
  prometheus_data: {}
  grafana_data: {}

services:
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: unless-stopped
    ports:
     - '3000:3000'
    volumes:
      - grafana_data:/var/lib/grafana
    networks:
      - monitoring

http://<hostname>:3000 にアクセスし、admin / admin にてログイン後、
データソースから Prometheusを選択し、 http://localhost:9090 を設定する

ダッシュボードのImportから以下のテンプレートを使用してダッシュボードを作成する

https://grafana.com/grafana/dashboards/1860-node-exporter-full/

まとめ

  • 省電力で静音性も高いIntel N100ありがとう
  • Proxmox VE は無料なのにクラスタを組んだりできるのいいね
  • PrometheusとGrafanaでさくっとメトリクスの可視化できるの素晴らしい
  • サーバの健康はこころの健康

Proxmox VEやnasneのexporterの設定や、Cloudflare Tunnelを使って外出先からGrafanaへアクセスできるようにした話は後で書く。