Netdata.Cloudの不穏な無料プラン改変に端を発して、Alpine Linux 仮想マシンをベースに Prometheus と Grafana で、自前の監視環境を構築しました。
始まりはNetdata無償プランの改変
監視系は簡単に導入できるNetdataを採用(関連記事はこちら)してきましたが、2024年初めにプラン構成の見直しのお知らせと共に、有償のBusinessプランの2ヶ月トライアルへ移行されてしまいました。

図01.Business版トライアルへ移行
現時点のプラン構成を確認すると、無料のCommunityプランは存続も、ノード数が最大5つまでという制限が課せられていました。
そこでちょっといじわるに、Netdataを使い始めた2023年当時のプラン構成をインターネット・アーカイブで確認すると、当時はノード数制限は存在せず。
ネットサービスではありがちの雲行きの怪しさを感じ、かねてより気にはなっていたPrometheusとGrafanaによる監視環境を自前で構築しようと思います。
Alpine Linux仮想マシンの概要
ネットで散見されるのはdockerでの構築例が多い中、今回はVMware ESXi 8.0ハイパーバイザ上に立てた、次のAlpine Linux仮想マシンへ構築します。
|
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 28 29 30 31 32 33 34 35 |
prom14:~$ uname -a Linux prom14 6.6.26-0-virt #1-Alpine SMP PREEMPT_DYNAMIC Thu, 11 Apr 2024 06:39:39 +0000 x86_64 Linux prom14:~$ cat /etc/os-release NAME="Alpine Linux" ID=alpine VERSION_ID=3.19.1 PRETTY_NAME="Alpine Linux v3.19" HOME_URL="https://alpinelinux.org/" BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues" prom14:~$ sudo df -h Filesystem Size Used Available Use% Mounted on devtmpfs 10.0M 0 10.0M 0% /dev shm 487.4M 0 487.4M 0% /dev/shm /dev/sda3 3.4G 103.3M 3.1G 3% / tmpfs 195.0M 116.0K 194.9M 0% /run efivarfs 256.0K 44.1K 206.9K 18% /sys/firmware/efi/efivars /dev/sda1 263.5M 280.0K 263.2M 0% /boot/efi tmpfs 487.4M 0 487.4M 0% /tmp prom14:~$ free -h total used free shared buff/cache available Mem: 974.9M 89.1M 841.2M 116.0K 44.6M 793.7M Swap: 1.2G 0 1.2G prom14:~$ sudo fdisk -l Found valid GPT with protective MBR; using GPT Disk /dev/sda: 10485760 sectors, 1024M Logical sector size: 512 Disk identifier (GUID): 959d03a4-ab7c-4e17-baa5-c36fa205ea03 Partition table holds up to 128 entries First usable sector is 2048, last usable sector is 10485726 Number Start (sector) End (sector) Size Name 1 2048 542719 264M 2 542720 3164159 1280M 3 3164160 10483711 3574M |
仮想マシンの構築手順は、以前Unboundサーバを立てた時と全く同じなので、詳細はそちらを参照。
Prometheusの導入
初期設定で既にレポジトリをEdgeへ振り向けた上で、apkパッケージマネージャから現行のPrometheusパッケージと、そのメトリクス収集汎用エージェントをインストール。
|
1 2 3 4 |
#http://dl-cdn.alpinelinux.org/alpine/v3.19/main #http://dl-cdn.alpinelinux.org/alpine/v3.19/community https://dl-cdn.alpinelinux.org/alpine/edge/main https://dl-cdn.alpinelinux.org/alpine/edge/community |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
prom14:~$ sudo apk add prometheus (1/2) Installing prometheus (2.51.1-r1) Executing prometheus-2.51.1-r1.pre-install (2/2) Installing prometheus-openrc (2.51.1-r1) Executing busybox-1.36.1-r25.trigger OK: 297 MiB in 85 packages prom14:~$ sudo apk add prometheus-node-exporter (1/2) Installing prometheus-node-exporter (1.7.0-r2) (2/2) Installing prometheus-node-exporter-openrc (1.7.0-r2) Executing busybox-1.36.1-r25.trigger OK: 312 MiB in 87 packages |
各パッケージのOpenRCサービスパッケージもインストールされる
インストール完了後、追加されたOpenRCサービスは次の2つ。
- /etc/init.d/prometheus
- /etc/init.d/node-exporter
それぞれサービスを開始と、システム開始と共に自動起動するよう登録します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
prom14:~$ sudo rc-service prometheus start * Caching service dependencies ... [ ok ] * /var/log/prometheus.log: creating file * /var/log/prometheus.log: correcting owner * /var/lib/prometheus/data: correcting mode * /var/lib/prometheus/data: correcting owner * Starting prometheus ... [ ok ] prom14:~$ rc-service prometheus status * status: started prom14:~$ sudo rc-update add prometheus default * service prometheus added to runlevel default prom14:~$ sudo rc-service node-exporter start * /var/log/prometheus: creating directory * /var/log/prometheus: correcting owner * /var/log/prometheus/node-exporter.log: creating file * /var/log/prometheus/node-exporter.log: correcting owner * Starting node-exporter ... [ ok ] prom14:~$ sudo rc-update add node-exporter default * service node-exporter added to runlevel default |
OpenRCのサービス状態一覧は、
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
prom14:/etc$ rc-status Runlevel: default sshd [ started ] crond [ started ] prometheus [ started 01:04:10 (0) ] chronyd [ started ] acpid [ started ] node-exporter [ started 01:14:10 (0) ] Dynamic Runlevel: hotpluggedDynamic Runlevel: needed/wanted sysfs [ started ] fsck [ started ] root [ started ] localmount [ started ] Dynamic Runlevel: manual |
自動起動設定の一覧は次の通り。
|
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 |
prom14:~$ rc-update show acpid | default bootmisc | boot chronyd | default crond | default devfs | sysinit dmesg | sysinit hostname | boot hwclock | boot hwdrivers | sysinit killprocs | shutdown loadkmap | boot mdev | sysinit modules | boot mount-ro | shutdown networking | boot node-exporter | default open-vm-tools | boot prometheus | default savecache | shutdown seedrng | boot sshd | default swap | boot sysctl | boot syslog | boot |
普段、systemdに慣れているとOpenRCとの差異に悩まされるところ、gentoo linux wikiで見つけたのこちらのチートシートがとても参考になりました。
ともあれ、こうしてブラウザからPrometheusのWebUI(9090番ポート)を開けるようになりました。
Node-exporterへは、9100番ポートでアクセス可能です。

図05.Node-exporter metrics
自身のNode-Exporterを読む
次に、Prometheusの設定ファイル /etc/prometheus/prometheus.yml の scarape_configs: 下にNode-exporter用のジョブを追加、自身のNode-exporterの情報 localhost:9100 を targets に記述して読み込むようにします。
|
1 2 3 4 5 6 7 8 |
scrape_configs: - job_name: "prometheus" static_configs: - targets: ["localhost:9090"] - job_name: 'node' static_configs: - targets: ['localhost:9100'] |
Prometheusサービスを再起動して設定を反映させます。
|
1 2 3 4 |
prom14:/etc/prometheus$ sudo vi prometheus.yml prom14:/etc/prometheus$ sudo rc-service prometheus restart * Stopping prometheus ... [ ok ] * Starting prometheus ... [ ok ] |
Prometheus WebUIメニューの Status の中にある Targets で、自身のNode-exporterが追加されているのを確認。
バックエンドが最低限整ったところで、次ページではフロントエンドにGrafanaを導入します。







