Prometheusを使ってMicrosoft SQL Serverを監視する方法

By 清水 孝郎 - MAY 9, 2021

SHARE:

本文の内容は、2021年4月29日にDavid Lorite Solanasが投稿したブログ(https://sysdig.com/blog/monitor-sql-server-prometheus)を元に日本語に翻訳・再構成した内容となっております。

この記事では、Prometheus を使って SQL Server をモニターする方法をご紹介します。SQL Server は人気のあるデータベースで、シンプルな Prometheus エクスポーターを使って非常にわかりやすく監視することができます。

他のデータベースと同様に、SQL Server にも、トランザクションの遅延やデータベース内の接続数の多さなど、多くの障害ポイントがあります。このガイドでは、ユーザーやコンシューマーの視点からサービスを広く見ることができる、縮小されたメトリクスのセットである Golden Signals をベースにしています。これにより、アプリケーションの動作に直接影響を与えているかもしれない潜在的な問題を検出することができます。

PrometheusでSQL Serverを監視する

PrometheusでSQL Serverを監視するには、SQL Server専用のエクスポーターであるsql_exporterを使用します。このエクスポーターはメトリクスを公開し、Prometheusがそれを取得できるようにします。

また、このエクスポーターの柔軟性により、ビジネスに応じた任意のカスタムメトリクスを作成することができるので、ほとんどすべてのものを監視することができます。

Prometheusでメトリクスを取得するには、特定のジョブを作成するか、Kubernetesにエクスポーターをデプロイしている場合はポッドにアノテーションを付けるだけです。

さて、Prometheusを使ってSQL Serverの監視を始めたところで、どのようなメトリクスに注目し、アラートを作成すべきかを見てみましょう。

見ておくべきこと

データベースは稼働しているか?

データベースが稼働しているかどうかは、up メトリクスを使って確認できます。

データベースが稼働しているかどうかを確認するために、PromQLアラートを作成してみましょう。

up{job="mssql"} == 0


デッドロック

mssql_deadlocksメトリクスを使用して、データベースにデッドロックがないことを確認できます。デッドロックは、排他的なロックを持つ 2 つのプロセスが同じリソースにアクセスしようとすると発生します。片方だけがアクセスを得て、もう片方はデータベースによってkillされます。

1分間の時間枠の中でデッドロックの数が5つに増加したらアラートを作成してみましょう:

increase(mssql_deadlocks[1m]) > 5


ディスクスペース

ディスク上に十分なスペースがないと、データベースが壊れてしまいます。このために、mssql_disk_space_used_bytes_totalメトリクスを使用し、mssql_disk_space_available_bytes_totalと組み合わせることで、ディスクの使用量と使用可能な総容量をバイト単位で返します。

データベースが利用可能なスペースの85%以上を使用している場合、アラートを作成してみましょう:

sum(mssql_disk_space_available_bytes_total{job=~"mssql"})/sum(mssql_disk_space_total_bytes_total{job=~"mssql"})  > 0.85

カスタムメトリクスの作成

ビジネスに関連する特定の事柄を監視するためのカスタムクエリーを作成することも可能です。例えば、電子商取引における今日の請求書の合計金額を取得するためのメトリクスを作成することができます。

そのためには、mssql-metrics-config ConfigMap でコレクター用の新しいデータエントリを作成する必要があります:

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: mssql
  name: mssql-metrics-config
  labels:
    app: mssql-exporter
data:
  sql_custom_invoice.collector.yml:
    collector_name: sql_custom_invoice
    metrics:
      - metric_name: total_invoiced_today
        type: gauge
        help: 'Get total amount invoiced today.'
        values: [invoiced_today_sum]
        query_ref: total_invoiced_today_query
  
    queries:
      - query_name: total_invoiced_today_query
        query: | 
          SELECT sum(total) AS invoiced_today_sum FROM Invoice where invoiceDate=CAST(GETDATE() AS date);

次に、sql_exporter.ymlの21行目にあるターゲットコレクターに、このコレクターを追加します。

target:
  collectors: [mssql_standard, sql_custom_invoice]

コレクターのファイル名が .collector.yml で終わっていることを確認します。

ダッシュボードを数分で作成

この記事では、Prometheus を使って SQL Server を監視する方法と、見るべき主要なメトリクスを例を挙げて特定する方法を学びました。また、ビジネスニーズに基づいてカスタムメトリクスを作成する方法も学びました。

これらのメトリクスはすべて、PromCatからダウンロードできるダッシュボードで利用できます。これらは、GrafanaやSysdig Monitorでも使用できます!
screenshot showing the dashboard page for the SQL Server configuration in PromCat.io, where you can download the dashboards for both Grafana and Sysdig Monitor!
ここではGrafanaとSysdig Monitorの両方のダッシュボードをダウンロードできます。
このダッシュボードを使えば、Microsoft SQL Serverインスタンスのトラブルシューティングや改善を行う際に、全体像を把握することができます。

この統合をお試しになりたい方は、ぜひSysdig Monitorの無料トライアルにご登録ください。