---
title: "Grafana アラートルールをコード化して効率的に運用しよう | grasys blog"
url: "https://blog.grasys.io/post/hk/grafana-operate-efficiently/"
description: "こんにちは、エンジニアの HK です。 突然ですが皆さんは Grafana でサーバー監視をしていますか？ 弊社ではサーバーの負荷状況などを確認するために Grafana を使っています。 今回は Grafana を効率的に構築する方法をご紹介します。すでに実務で Grafana を使っている人にとってはもしかしたら…"
---

# Grafana アラートルールをコード化して効率的に運用しよう

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[HK](/authors/hk/)
-   公開日：2025年2月26日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#Grafana](/tags/grafana/)

![Grafana アラートルールをコード化して効率的に運用しよう](/_astro/hero.CjRWlCTm_Z196QMq.webp)

こんにちは、エンジニアの HK です。

突然ですが皆さんは Grafana でサーバー監視をしていますか？

弊社ではサーバーの負荷状況などを確認するために Grafana を使っています。

今回は Grafana を効率的に構築する方法をご紹介します。すでに実務で Grafana を使っている人にとってはもしかしたら馴染みのある話題かもしれません。

また、これから Grafana を使ってサーバーの監視をしようと考えている人にとっては参考になれば幸いです。

先に結論を言ってしまうと、2 台以上のサーバーを Grafana で管理したい場合は、アラートルールの管理は yaml でコード化して管理する方がおすすめです！

実務では何台ものサーバーを扱うことになるとおもいますので、そういった時はアラートルールをコード化しておいた方が何倍も楽に管理ができるというのが今回の内容となります。

それでは、簡単に設定方法を紹介します。

まずは UI 上でアラートルールを設定します。  
今回はサーバーの CPU 使用率を計測して、80%以上だった場合にアラートが発報するルールにしましょう。

![Grafana アラートルールをコード化して効率的に運用しようの画面（1）](/_astro/01-34.84.20.46_3000_alerting_new_alerting_returnTo2Falerting2Flist-1-1-1024x973-4d92ca8c.oyDgK1Nq_Z1zSAuR.webp)

これで元となるアラートルールができました。

![Grafana アラートルールをコード化して効率的に運用しようの画面（2）](/_astro/02-16ef801136c214040973deaad3c099db-1024x79-1642a67c.BHUyR0DO_sI5lH.webp)

それでは、このルールをもとに、閾値を変えつつ他のサーバーにも設定していきます。

まず、このアラートルールを export して yaml として出力します。

![Grafana アラートルールをコード化して効率的に運用しようの画面（3）](/_astro/03-8d84b34ab5f85c93af475e1ea69c6bc1-1024x189-1-3a1a9979.uLIfIaiZ_Z1tuW8N.webp)

![Grafana アラートルールをコード化して効率的に運用しようの画面（4）](/_astro/04-4fd1765a4bce822d272f52c767f28928-1-1024x304-cf039e12.ud67SJOG_26D2jC.webp)

yaml ファイルを表示

Plain textcontent\_copy

```
apiVersion: 1
groups:
    - orgId: 1
      name: test_evaluation_1m
      folder: test_folder
      interval: 1m
      rules:
        - uid: ****************
          title: test-cpu-usage
          condition: C
          data:
            - refId: A
              relativeTimeRange:
                from: 600
                to: 0
              datasourceUid: ****************
              model:
                disableTextWrap: false
                editorMode: code
                expr: 100 - (avg by (hostname) (irate(node_cpu_seconds_total{mode="idle",hostname="********"}[1m])) * 100)
                fullMetaSearch: false
                includeNullMetadata: true
                instant: true
                intervalMs: 1000
                legendFormat: __auto
                maxDataPoints: 43200
                range: false
                refId: A
                useBackend: false
            - refId: C
              datasourceUid: __expr__
              model:
                conditions:
                    - evaluator:
                        params:
                            - 80
                        type: gt
                      operator:
                        type: and
                      query:
                        params:
                            - C
                      reducer:
                        params: []
                        type: last
                      type: query
                datasource:
                    type: __expr__
                    uid: __expr__
                expression: A
                intervalMs: 1000
                maxDataPoints: 43200
                refId: C
                type: threshold
          noDataState: NoData
          execErrState: Error
          for: 1m
          annotations: {}
          labels: {}
          isPaused: false
          notification_settings:
            receiver: test-receiver
```

この yaml をもとにアラートルールを増やしていきます。  
grafana-server があるサーバーで yaml ファイルを所定のディレクトリに設置しましょう。（今回は閾値を 90%に変更してみます）

yaml ファイルを表示

Plain textcontent\_copy

```
# vim provisioning/alerting/test-cpu-usage-90.yaml

apiVersion: 1
groups:
    - orgId: 1
      name: test_evaluation_1m
      folder: test_folder
      interval: 1m
      rules:
        - uid: cpu-usage-01
          title: test-cpu-usage-90
          condition: C
          data:
            - refId: A
              relativeTimeRange:
                from: 600
                to: 0
              datasourceUid: ****************
              model:
                disableTextWrap: false
                editorMode: code
                expr: 100 - (avg by (hostname) (irate(node_cpu_seconds_total{mode="idle",hostname="********"}[1m])) * 100)
                fullMetaSearch: false
                includeNullMetadata: true
                instant: true
                intervalMs: 1000
                legendFormat: __auto
                maxDataPoints: 43200
                range: false
                refId: A
                useBackend: false
            - refId: C
              datasourceUid: __expr__
              model:
                conditions:
                    - evaluator:
                        params:
                            - 90
                        type: gt
                      operator:
                        type: and
                      query:
                        params:
                            - C
                      reducer:
                        params: []
                        type: last
                      type: query
                datasource:
                    type: __expr__
                    uid: __expr__
                expression: A
                intervalMs: 1000
                maxDataPoints: 43200
                refId: C
                type: threshold
          noDataState: NoData
          execErrState: Error
          for: 1m
          annotations: {}
          labels: {}
          isPaused: false
          notification_settings:
            receiver: test-receiver
```

設定したら grafana-server に更新を反映させます。

Plain textcontent\_copy

```
# systemctl restart grafana-server
```

Grafana を確認してみると、アラートルールが増えています。

![Grafana Serverをsystemctlで再起動したコマンドの実行結果](/_astro/05-494569cf1f7f4625da837b67ab76d5dd-1024x116-f6770997.BJ8EM8yx_ZkIz7w.webp)

また、yaml ファイルで設定したアラートルールには Provision と表示され、UI からは編集できません（編集するための鉛筆マークが付いていない）。  
設定変更がしたくなったときはファイルから編集する必要があります。

実際の業務では、何台もの VM に同じ監視ルールを適用して、なおかつルールごとに微妙に値を調整することもあります。  
そんな時、既存ルールをコピーして一部を書き換えるだけでアラートルールを量産できると便利です。

yaml ファイルを表示

Plain textcontent\_copy

```
# cp test-cpu-usage-90.yaml test-cpu-usage-95.yaml
# vim test-cpu-usage-95.yaml

apiVersion: 1
groups:
    - orgId: 1
      name: test_evaluation_1m
      folder: test_folder
      interval: 1m
      rules:
        - uid: cpu-usage-02
          title: test-cpu-usage-95
          condition: C
          data:
            - refId: A
              relativeTimeRange:
                from: 600
                to: 0
              datasourceUid: ****************
              model:
                disableTextWrap: false
                editorMode: code
                expr: 100 - (avg by (hostname) (irate(node_cpu_seconds_total{mode="idle",hostname="********"}[1m])) * 100)
                fullMetaSearch: false
                includeNullMetadata: true
                instant: true
                intervalMs: 1000
                legendFormat: __auto
                maxDataPoints: 43200
                range: false
                refId: A
                useBackend: false
            - refId: C
              datasourceUid: __expr__
              model:
                conditions:
                    - evaluator:
                        params:
                            - 95
                        type: gt
                      operator:
                        type: and
                      query:
                        params:
                            - C
                      reducer:
                        params: []
                        type: last
                      type: query
                datasource:
                    type: __expr__
                    uid: __expr__
                expression: A
                intervalMs: 1000
                maxDataPoints: 43200
                refId: C
                type: threshold
          noDataState: NoData
          execErrState: Error
          for: 1m
          annotations: {}
          labels: {}
          isPaused: true
          notification_settings:
            receiver: test-receiver
```

今度は閾値を 95%に設定しました。

![Grafanaのアラート閾値を95パーセントに変更したYAML設定](/_astro/06-7b6ca9708df5ed37c75307b4f7db334b-1024x139-5ceafd10.C8Swji0G_2iOvfX.webp)

アラートルールが paused(一時停止)になっていますが、yaml 内で `isPaused: true` にすることでアラートの停止設定も切り替えることができます。

今回は 2 台だけの想定で試しましたが、台数が何台、何十台とあっても同じ方法でアラートルールを増やすことができます。

また、アラートルールをコード化しておくことで、git で組織内でいつどのような変更があったかを把握しやすくなるメリットもあります。

最初は直感的な GUI でなくファイル編集でアラートルールを管理することに違和感があるかもしれませんが、管理するサーバー台数が増えてくるとむしろコード化したファイルを編集して設定できる方が楽に感じられます。よければぜひ試してみてください。

それでは、また。

## この記事を書いた人

[![](/_astro/noicon.CTHOhNiB_Z24aAgM.webp)](/authors/hk/)

### [HK](/authors/hk/)

HKのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/hk/)