Prometheus始めてみた #2 -監視の開始からAlertmanagerまで-

[前回の記事](https://qiita.com/DQ5taku/items/709feaf2446b31865b16)に引き続き，prometheusについて書いていきたいと思います．
前回の記事ではprometheusの導入から起動までを行いました．今回は実際の使い方とnode-exporter，alertmanagerの導入を行います．
# Prometheusの実行
前回の記事でprometheusを[http://localhost:9090](http://localhost:9090)で確認しました．実際に使い方を見てみましょう．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744507/f67427ce-bfac-82de-4efb-2ed920fe29c9.png)
まず，上記のアドレスにアクセスすると上記のような画面になると思います．こちらの画面はpromQLというクエリ言語を入力するための式ブラウザというものになっています．

### 式ブラウザの使用
では，実際に式ブラウザを使ってみましょう．試しに検索欄にupと入力してexecuteしてみましょう．すると，up{instance="localhost:9090", job="prometheus"}という結果が表示されると思います．これは，up状態のprometheusサーバが一台だけであることを示しています．

### /metrics
また，[http://localhost:9090/metrics](http://localhost:9090/metrics)にアクセスするとメトリクスが取得できます．これは，prometheusが自分自身のprometheusメトリクスの測定装置を装備しているからです．

# Node exporter
Node exporterとは，LinuxなどのUnixシステムのカーネル，マシンレベルのメトリクスを開示するものです．具体的にはCPU，メモリ，ディスクスペース，ディスクI/O，ネットワークの帯域幅などの標準的なメトリクスやカーネルが持つ膨大なメトリクスが提供されています．
Node exporterは[こちら](https://prometheus.io/download/)からダウンロードできます．prometheusのダウンロードの時と同様に解凍しますが，今回は設定を変更する必要はないので，そのままコマンドを実行することができます．
```terminal: terminal
$ tar -xzf node_exporter-*.linux-amd64.tar.gz
$ cd node_exporter-*.linux-amd64/
$ ./node_exporter 
ts=2022-11-14T14:57:20.355Z caller=node_exporter.go:182 level=info msg="Starting node_exporter" version="(version=1.4.0, branch=HEAD, revision=7da1321761b3b8dfc9e496e1a60e6a476fec6018)"
ts=2022-11-14T14:57:20.355Z caller=node_exporter.go:183 level=info msg="Build context" build_context="(go=go1.19.1, user=root@83d90983e89c, date=20220926-12:32:56)"
```

続いて，prometheus下のprometheus.ymlファイルに下記の通りスクレイプ設定を追加することにより,　Node exporterのモニタリングを開始できます．
```yml:prometheus.yml
global:
    scrape_interval: 10s
scrape_configs:
    - job_name: prometheus
      static_configs:
      - targets:
          - localhost:9090
    - job_name: node
      static_configs:
      - targets:
          - localhost:9100
```
設定を反映するためには一度[Ctrl+C]キーでprometheusを停止し，もう一度./prometheusを実行する必要があります．
prometheusが起動しましたら，status下のtargetsを押してみてください．すると以下のような画面になり，ターゲットとしてNode exporterが含まれていることがわかると思います．
![スクリーンショット 2022-11-15 0.29.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744507/7834d7c7-6f20-4d61-2d07-2bcbc0996b44.png)

# Alertmanager
最後に，アラートを表示してみようと思います．今までと同じようにAlertmanagerを[こちら](https://prometheus.io/download/)からダウンロードし，解凍したのち実行できます．
```
$ tar -xzf alert_manager-*.linux-amd64.tar.gz
$ cd alert_manager-*.linux-amd64/
$ ./alert_manager
ts=2022-11-11T13:51:13.367Z caller=main.go:231 level=info msg="Starting Alertmanager" version="(version=0.24.0, branch=HEAD, revision=f484b17fa3c583ed1b2c8bbcec20ba1db2aa5f11)"
ts=2022-11-11T13:51:13.367Z caller=main.go:232 level=info build_context="(go=go1.17.8, user=root@265f14f5c6fc, date=20220325-09:31:33)"
ts=2022-11-11T13:51:13.386Z caller=cluster.go:185 level=info component=cluster msg="setting advertise address explicitly" addr=192.168.5.15 port=9094
ts=2022-11-11T13:51:13.389Z caller=cluster.go:680 level=info component=cluster msg="Waiting for gossip to settle..." interval=2s 
```
しかし，このままではどういった状況でどういったアラートを発火するのかという部分が記述できていません．こういった情報をprometheus.ymlと新しいrules.ymlというファイルに以下を記述する必要があります．
```yml:prometheus.yml
global:
    scrape_interval: 10s
    evaluation_interval: 10s
rule_files:
    - rules.yml
alerting:
    alertmanagers:
    - static_configs:
        - targets:
            - localhost:9093
scrape_configs:
    - job_name: prometheus
      static_configs:
      - targets:
          - localhost:9090
    - job_name: node
      static_configs:
      - targets:
          - localhost:9100
```

```rules.yml
groups:
    - name: example
    rules:
    - alert: InstanceDown
      expr: up == 0
      for: 1m
```
上記のrules.yml内ではupという状態が0(つまりupしていない)の際にInsatanceDownというアラートを創出するという記述になっています．
また，アラートを発火させるためにはnodeを一度[Ctrl+C]キーで停止させる必要があります．
そして，prometheusを再起動しましょう．
では，[http://localhost:9093](http://localhost:9093)にアクセスしてみましょう．
![スクリーンショット 2022-11-15 3.57.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2744507/2adf812c-80a4-5bc5-b4db-da95ab21124d.png)
上記のようになれば，成功です．上手くいかない場合は，alertmanagerの再起動などを試してみてください．

# まとめ
今回はprometheusの実行からalertmanagerの使用までをやってみました．alertmanagerではメールを設定することでアラートをメールから知らせてくれるという機能もあるそうなので，今後使ってみたいと思っています．