LoginSignup
45
39

More than 1 year has passed since last update.

Prometheusをはじめから丁寧に解説してみた[ハンズオン]

Last updated at Posted at 2021-03-01

Prometheus でサーバ監視 - 長生村本郷Engineers'Blog

概要

PrometheusSoundCloudというサービスのエンジニアによって開発されたオープンソースのシステム監視及びアラートツールキットです。内部に時系列のデータベースを持っていて、かつPull型のデータモデルを持っています。

詳細については、https://prometheus.ioをご覧ください。

特徴

Prometheusの主な機能は次のとおりです。

  • 柔軟なクエリ言語であるPromQLを持つ

  • Pull型(over HTTP)の監視サービスで時系列の収集

  • 独自のデータストア

  • グラフ化とダッシュボードのサポートの複数のモード(ただしGrafanaを使うことが多いです)

エコシステム

Prometheusエコシステムは非常に優秀なものがいくつかあります。

アーキテクチャ

プロメテウスアーキテクチャ
#公式より抜粋

一見アーキテクチャを見ると複雑ですが導入は非常に簡単です。

上の図の流れの一例として、まず、左下のJobExporters(Prometheus Target)からメトリクスを真ん中のPrometheus ServerがPullをします。その後収集したデータからAlertmanagerでエラー検知してSlackに送ったり、PromQLでログの可視化、解析を行います。

登場人物

この部分は10分で理解する Prometheusの引用となってしまいますが、とてもわかりやすかったため、掲載させていただきます。

上のアーキテクチャ図にも複数コンポーネントが登場しますが、はじめのところは以下の二つだけ知っておけばとりあえずなんとかなります。

名称 説明
exporter 監視対象サーバー上で動かすプログラム
テキスト形式でリソース情報を公開するWeb API のようなもの
監視対象のリソース毎に exporter が用意されている
prometheus 監視サーバーのプログラム
定期的に全ての exporter をポーリングしてリソース情報を収集する
監視したデータは prometheus 内の DB に保持される

Exporter ⇨ アーキテクチャ図の左下

prometheus ⇨ アーキテクチャ図の真ん中

Prometheusのメリット

Prometheusを導入するメリットをいくつか紹介します。総合監視ツールZABBIX等と比較していきます。

  • 時系列DBにデータを格納するのでI/Oが速く、画面表示が軽快(ただしGrafana経由が多い) ⇦ ZABBIXはRDBMSのため、重くなって画面表示が遅くなることがある。
  • 分散管理が容易で、Diskやメモリの追加でスケールアップできる。 ⇦ ZABBIXはRDBMSのレプリケーションやDBのメモリチューニングが必要
  • APIを介してホストの自動検出、削除が標準機能で可能であり、環境変更への対応が容易。
  • エンドポイントを登録すればホストに紐づかなくても監視可能、柔軟性が高い。 ⇦ ZABBIXでもWEBを使えばできるが設定が必要
  • Grafanaの機能だが、グラフやダッシュボードUIの作成が綺麗で容易

Prometheusのデメリット

デメリットもいくつかあります。

  • データの長期保存を前提としていないので、別途に長期保存用のサーバが必要 ⇦ RDBMSなら問題ない
  • デフォルトの設定だとID/PassなしのWEBアクセスでデータの閲覧や監視の無効化などができてしまうので、接続制限やBasic認証が必要
  • ストレージ問題 ⇦ 一つ目と被りますが、Prometheusは、デフォルトではTSDB(Time Series Database)というローカルのストレージを利用するのですが、これは冗長化や可用性が考慮されていません。対策として、Metricsの容量設計やRemoteStorageという機能を用い、外部のDBに保存する必要があります。

一長一短だとは思いますが、差し引いてもかなり優秀なソフトウェアだと思います。

GUI(概観)

簡単に実際のダッシュボードの画面を貼り付けていきます。

グラフとか

スクリーンショット 2021-03-01 23.52.17.png

なんとなくの動きは可視化されてますね。

Target全体

スクリーンショット 2021-03-01 23.52.47.png

正常系

スクリーンショット 2021-03-01 23.51.44.png

アラート

スクリーンショット 2021-03-01 23.58.53.png

インスタンスが止まっていますね。。AlertManagerを使えばSlackに通知することもできます。⬇︎

スクリーンショット 2021-03-02 0.00.21.png

たくさんアラートが飛んできています。

Grafana

ログデータ可視化ツールGrafanaを使うとかっこよく可視化できます。(大事)

また、ダッシュボードを作成したり、独自のUIパーツでカスタマイズすることもできます。
grafana_s.png

いい感じのデザインですね。


なんとなく知れたからいいやという方はここまでお疲れ様でした。:bow:

実際に触ってみたいという方はもう一踏ん張りしましょう!:fire:

ハンズオン

目標

  • Prometheusなんとなく触れるようになる
    • 環境が構築できる
    • 起動できる
    • targetとかなんとなくわかるようになる

前提知識

今回はDocker-composeを使うので前提知識とします。

  • Docker-compose

環境のセットアップ

ローカル環境にインストールすることも可能ですが、コンテナを使うことが多いのでdockerを使ってセットアップしていきます。

フォルダ構成

tree
.
├── docker-compose.yaml
└── prometheus
    └── prometheus.yml

1 directory, 2 files

docker-compose.yamlとprometheus.ymlを使います。実際の開発現場ではalert manager,grafana.envやalertrulesなども作成してカスタマイズしていきます。

docker-compose.yamlの作成

version: "3"

services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    volumes:
      - ./prometheus:/etc/prometheus/
    ports:
      - 127.0.0.1:9090:9090

  grafana:
    image: grafana/grafana
    container_name: grafana
    ports:
      - 3000:3000

9090番ポートでprometheusサーバーを立て、3000番ポートでgrafanaサーバーを立てます。volumes: でローカルのprometheus設定ファイルをコンテナ内にマウントさせます。

prometheus.ymlの作成

global:
    scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
    evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
    external_labels:
      monitor: "codelab-monitor"

rule_files:

scrape_configs:
  - job_name: "prometheus"

    static_configs:
      - targets: ["localhost:9090"]

こちらはprometheusの詳細設定を記述するファイルです。static_configsの場所に計測したいエンドポイントを設定します。また、監視の間隔や異常検知の定義(alert_rulesなど)もこのファイルに記述します。

起動

docker-compose up -d

これでprometheusサーバー、grafanaサーバーが起動したかと思います。

http://localhost:9090 に移動するとprometheusにアクセスできます。

また、statusタブからtargetを押すとhttp://localhost:9090/metricsが正常に動作していることがわかります。

スクリーンショット 2021-03-02 0.03.04.png

それではgrafanaにもアクセスしましょう!

http://localhost:3000 に移動するとgrafanaにアクセスできます。初回起動時にユーザー名、パスワードを聞かれますがどちらもadminでログインできます。

login.png

prometheusと連携するためにはDataSourceからprometheusを追加する必要があります。

スクリーンショット_2016-12-12_07-49-38.png

Save&Testを押して、Prometheus Statusボタンを押し、グラフが描画されるかどうか確認してください!

dashboard.png

完成です :basketball_player:

最後に

今回のハンズオンではプロメテウスサーバーの監視というあまり意味のないことをしましたが、APIサーバー、cacheサーバー、インフラなどprometheusでは様々を監視可能です。

不明点などございましたらお気軽にコメントをお願いします :bow:

参考文献

公式サイト
prometheus のデータを grafana でグラフ表示してみた
10分で理解する Prometheus
次世代監視の大本命! Prometheus を実運用してみた
10分で理解するGrafana
Observabilityをはじめよう!(後編) 〜Metrics/Logs/Tracesチュートリアル〜

45
39
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
39