Prometheus 監視システム --- あなたにはそれがふさわしい

目次

1: プロメテウス 

1. プロメテウスの概要

2. 応用シナリオ

3. プロメテウスの特徴

4. プロメテウスの生態学的構成要素

(1) Prometheusサーバー:サービスコアコンポーネント

(2) クライアントライブラリ:クライアントライブラリ

(3)エクスポーター: インジケータエクスポーザー

(4) サービスディスカバリ:サービスディスカバリ

(5) アラートマネージャー: 独立したアラームモジュールです。

(6) プッシュゲートウェイ: 乗り換え駅に類似

(7)グラファナ

5. Prometheus の動作モード

7. プロメテウスの制限

2: Prometheus をデプロイする 

1. Prometheus Server のインストールと関連構成

 2.エクスポーターの導入 

3: MySQL の監視設定例

1. mysqld_exporter-0.14.0.linux-amd64.tar.gz を /opt ディレクトリにアップロードし、解凍します。

 2. 起動ファイルの設定

 3. MySQL 構成ファイルを変更する

 4. エクスポーターユーザーを認可する

 5. サービスを再起動します 

 6. Prometheusサーバー上で操作する

4: Nginx の監視構成例

1. nginxプラグインを解凍します。

2.Nginxをインストールする

3. Prometheusサーバー上で操作する

 5: Grafana をデプロイする

1. ダウンロードしてインストールします

2. データソースの構成

3. grafana監視パネルのインポート

6: Prometheus サービス ディスカバリーをデプロイする 

1. ファイルベースのサービス検出

2. Consul に基づくサービス検出

3. Kubernetes API に基づくサービス検出


1: プロメテウス 

1. プロメテウスの概要

Prometheus は、オープンソースのサービス監視システムおよび時系列データベースであり、共通のデータ モデルと高速なデータ収集、ストレージ、およびクエリ インターフェイスを提供します。そのコア コンポーネントである Prometheus サーバーは、静的に構成された監視ターゲットまたはサービス検出に基づいて自動的に構成されたターゲットからデータを定期的にプルし、新しくプルされたデータはストレージ デバイスに保存されます。

各監視対象ホストは、専用のエクスポーター プログラムを通じて監視データを出力するためのインターフェイスを提供できます。ターゲットで監視データを収集し、Prometheus サーバーによるクエリ用の HTTP インターフェイスを公開します。Prometheus は定期的に HTTP ベースのプル メソッドを使用します。性的に収集されたデータ。 
アラームルールがある場合は、データ取得後にルールに従って計算され、アラーム条件を満たした場合にアラームが生成され、Alertmanagerに送信され、アラームの集計と配信が完了します。
監視対象のターゲットがデータをアクティブにプッシュする必要がある場合、Pushgateway コンポーネントを使用してデータを受信して​​一時的に保存し、Prometheus サーバーがデータ収集を完了するのを待つことができます。

時系列データの収集、保存、アラーム、表示を行うには、監視対象を事前に監視システムに組み込む必要があり、監視対象は構成情報を通じて静的に指定することも、サービス検出メカニズムを通じて Prometheus を動的に管理することもできます。
Prometheus は、API サーバーをサービス検出システムとして直接使用して、クラスター内のすべての監視可能なオブジェクトを動的に検出および監視できます。

Prometheus 官网地址:https://prometheus.io

Prometheus github 地址:https://github.com/prometheus

2. 応用シナリオ

TSDB は、Prometheus のストレージ エンジンとして、データ監視のアプリケーション シナリオに完全に適合します
● 保存されるデータの量が非常に多い
● ほとんどの場合、書き込み操作です
● 書き込み操作はほぼ順次追加され、ほとんどの場合、データは時間順に並べ替えられます
● 非常 データはめったに更新されません。ほとんどの場合、データは収集されてから数秒または数分後にデータベースに書き込まれます。 ● 削除操作は通常、ブロック削除です。開始履歴時刻と選択してください
。後続のブロックを指定します。特定の時刻またはランダムな時刻のデータが削除されることはほとんどありません
●基本データは大きく、一般にメモリ サイズを超えます。一般に、ごく一部のみが選択され、パターンはなく、キャッシュはほとんど影響しません。
読み取り操作は、非常に一般的な昇順または降順の順次読み取りです
。高度な同時読み取り操作が非常に一般的です。

3. プロメテウスの特徴

●多次元データモデル:メトリクス名とキーと値のペアで識別される時系列データ 時
系列データ:システムやデバイスの状態変化を時系列に記録したデータ、各データをサンプルと呼び、サーバー指標データ、アプリケーション性能監視データ、ネットワークデータなどはすべて時系列データです

●内蔵時系列(Time Series)データベース:Prometheus、外部リモートストレージは通常使用:InfluxDB、OpenTSDB等。

●promQLは、多次元データを使用して複雑なクエリを完了できる柔軟なクエリ言語です。

HTTPプル方式で時系列データを収集

●データ収集用のPushGatewayコンポーネントにも対応

●静的構成またはサービス検出によるターゲットの検出

●データソースとしてGrafanaへのアクセスをサポート    

4. プロメテウスの生態学的構成要素

Prometheus は時系列インジケーター データの収集と保存を担当しますが、データ分析、集計、視覚的表示、アラームなどの機能は Prometheus Server の責任ではありません。
Prometheus エコシステムには複数のコンポーネントが含まれており、その一部はオプションです。

(1) Prometheusサーバー:サービスコアコンポーネント

監視データはプル方式で収集され、http プロトコルで送信され、時系列データが保存され、「アラーム ルール」に基づいてアラーム通知が生成されます。Prometheus サーバーは、取得、ストレージ、PromQL
の 3 つの部分で構成されます。取得: アクティブなターゲット ホスト上の監視インジケータ データを取得する役割を果たします。ストレージ: ストレージ。主に収集されたデータをディスク上に保存します。デフォルトは 15 日です。PromQL : Prometheus が提供するクエリ言語モジュールです。


(2) クライアントライブラリ:クライアントライブラリ

その目的は、アプリケーションに組み込まれた測定システムに計測機能をネイティブに提供したいアプリケーションに便利な開発パスを提供することです。

(3)エクスポーター:インジケータエクスポーザー

組み込みのインスツルメンテーションをサポートしていないアプリケーションまたはサービスのパフォーマンス インジケーター データを収集し、それを HTTP インターフェイスを通じて Prometheus Server に提供する責任を負います。
言い換えれば、エクスポーターは、ターゲット アプリケーションから元の形式でデータを収集および集約し、外部公開のためにインジケーターを Prometheus 形式に変換または集約する責任を負います。
一般的に使用されるエクスポーター
●ノードエクスポーター:平均負荷、CPU、メモリ、ディスク、ネットワーク、その他のリソース情報インジケーターデータなど、サーバーノードの物理インジケーターステータスデータを収集するために使用され、すべてのコンピューティングノードに展開する必要があります。
インジケーターの詳細な紹介: https://github.com/prometheus/node_exporter

●mysqld-exporter/nginx-exporter

●Kube-State-Metrics : Prometheus の K8S リソース データを収集するエクスポータで、APIServer をリッスンすることで kubernetes クラスター内のリソース オブジェクト (ポッド、デプロイメント、サービスなど) のステータス インジケーター データを収集します。同時に、主にリソースの収集数と収集中に発生した例外の数に関する統計など、独自のデータも提供します。
kube-state-metrics は単にメトリック データを提供するだけであり、これらのメトリック データは保存しないことに注意してください。そのため、Prometheus を使用してこのデータをキャプチャして保存できます。主な焦点は、 Deployment などのビジネス関連のメタデータです。ポッド、レプリカのステータスなど。スケジュールされているレプリカの数は何ですか? 現在何個入手可能ですか?実行中/停止/終了状態にあるポッドはいくつありますか? ポッドは何回再起動されましたか? 実行中のジョブの数。

●cAdvisor : CPU、メモリ、ネットワークI/O、ディスクI/Oなど、コンテナ内で使用されるリソースに関する情報を監視するために使用されます。

●blackbox-exporter : 業務コンテナの生存性を監視します。

(4) サービスディスカバリ:サービスディスカバリ

監視対象のターゲットを動的に検出するために使用される Prometheus は、ファイル、DNS、Consul、Kubernetes などの複数のサービス検出メカニズムをサポートしています。サービス検出は、サードパーティが提供するインターフェースを通じて実行でき、Prometheus は監視する必要があるターゲットのリストをクエリし、これらのターゲットをポーリングして監視データを取得します。このコンポーネントは現在、Prometheus Server の組み込みでサポートされています

(5) アラートマネージャー:独立したアラームモジュールです。

Prometheus サーバーから「アラーム通知」を受信すると、重複排除、グループ化が行われ、対応する受信者にルーティングされてアラームが発行されます。一般的な受信方法には、電子メール、DingTalk、企業 WeChat などが含まれます。
Prometheus Server は、アラーム指示の生成のみを担当します。特定のアラーム動作は、別の独立したアプリケーションである AlertManager によって処理されます。アラート指示は、ユーザーが提供したアラーム ルールに基づいて Prometheus Server によって定期的に計算され、生成されます。Alertmanager がアラーム指示を受信した後、 Prometheus サーバー、ユーザー定義のアラーム ルートに基づいてアラーム情報をアラーム受信者に送信します。

(6) プッシュゲートウェイ:乗り換え駅に類似

Prometheus のサーバー側はデータをプルするためにプル メソッドのみを使用しますが、一部のノードは何らかの理由でデータをプッシュするためにプッシュ メソッドしか使用できないため、プッシュ データを受信し、それを Prometheus のサーバー プルのリレーに公開するために使用されます。 .スタンド。
ターゲット ホストが短期タスク データを Pushgateway にレポートし、Prometheus サーバーが Pushgateway からデータをプルすることが理解できます。

(7)グラファナ

収集したデータを視覚的に表示し、アラーム受信者にタイムリーに通知できる、クロスプラットフォームのオープンソースの測定分析および可視化ツールです。公式ライブラリには豊富なダッシュボード プラグインが含まれています。


5. Prometheus の動作モード

●Prometheus Server は、Service Discovery メカニズムまたは静的構成に基づいて監視対象 (Target) を取得し、各ターゲットのインジケーター エクスポーターを介してインジケーター データを収集 (スクレイピング) します。

●Prometheus Server には、インジケーター データを永続的に保存するためのファイルベースの時系列ストレージが組み込まれており、ユーザーは PromQL インターフェイスを使用してデータを取得でき、オンデマンドでアラーム要件を Alertmanager に送信して、アラーム コンテンツの送信を完了することもできます。

●一部の短時間実行ジョブはライフサイクルが短すぎて、必要なインジケーター データをサーバーに効果的に供給できません。通常、プッシュ (Push) を使用してインジケーター データを出力します。Prometheus は、プッシュされたデータを受信するために Pushgateway を使用し、サーバー上でフェッチします。側

6. プロメテウスのワークフロー

(1) Prometheus は Prometheus Server をコアとして使用し、時系列データの収集と保存に使用されます。Prometheusサーバーは、プル方式で監視対象から指標データをプルするか、プッシュゲートウェイで収集したデータをPrometheusサーバーにプルします。
(2) Prometheus サーバーは、収集した監視指標データを TSDB を介してローカル HDD/SSD に保存します。
(3) Prometheus が収集した監視指標データは時系列に保存され、アラーム ルールを設定することで、トリガーされたアラーム通知が Alertmanager に送信されます。
(4) Alertmanager は、アラーム受信者を設定することにより、電子メール、DingTalk、または企業 WeChat にアラームを送信します。
(5) Prometheus 独自の Web UI インターフェイスは、監視データをクエリするための PromQL クエリ言語を提供します。
(6) Grafana を Prometheus データ ソースに接続して、監視データをグラフ形式で表示できます。

7. プロメテウスの制限

●Prometheus は指標監視システムであり、イベントやログの保存には適しておらず、正確なデータではなく傾向監視が表示されます。

●Prometheus は、最近の監視データのみをクエリする必要があると考えています。そのローカル ストレージは、短期 (1 か月など) データを保存するように設計されているため、大量の履歴データの保存はサポートされていません。長期の履歴データを保存する場合は、
リモート ストレージ メカニズムに基づいて InfluxDB や OpenTSDB などのシステムにデータを保存することをお勧めします。

●Prometheus のクラスタ機構はまだ成熟していないが、Thanos や Cortex をベースに Prometheus クラスタの高可用性クラスタやフェデレーションクラスタを実装することができる。


2: Prometheus をデプロイする 

1. Prometheus Server のインストールと関連構成

(1) prometheus-2.35.0.linux-amd64.tar.gzを/optディレクトリにアップロードし、解凍します。

systemctl stop firewalld
setenforce 0

cd /opt/
tar xf prometheus-2.37.0.linux-amd64.tar.gz
mv prometheus-2.37.0.linux-amd64 /usr/local/prometheus

cat /usr/local/prometheus/prometheus.yml | grep -v "^#"
global:                    #用于prometheus的全局配置,比如采集间隔,抓取超时时间等
  scrape_interval: 15s            #采集目标主机监控数据的时间间隔,默认为1m
  evaluation_interval: 15s         #触发告警生成alert的时间间隔,默认是1m
  # scrape_timeout is set to the global default (10s).
  scrape_timeout: 10s            #数据采集超时时间,默认10s

alerting:                #用于alertmanager实例的配置,支持静态配置和动态服务发现的机制
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

rule_files:                #用于加载告警规则相关的文件路径的配置,可以使用文件名通配机制
  # - "first_rules.yml"
  # - "second_rules.yml"

scrape_configs:            #用于采集时序数据源的配置
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"        #每个被监控实例的集合用job_name命名,支持静态配置(static_configs)和动态服务发现的机制(*_sd_configs)

    # metrics_path defaults to '/metrics'
    metrics_path: '/metrics'    #指标数据采集路径,默认为 /metrics
    # scheme defaults to 'http'.

    static_configs:                #静态目标配置,固定从某个target拉取数据
      - targets: ["localhost:9090"]

 (2) システム起動ファイルを設定し、Prometheustを起動する

cat > /usr/lib/systemd/system/prometheus.service <<'EOF'
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path=/usr/local/prometheus/data/ \
--storage.tsdb.retention=15d \
--web.enable-lifecycle
  
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

 (3) スタート 

systemctl start prometheus
systemctl enable prometheus

netstat -natp | grep :9090

浏览器访问:http://192.168.231.100:9090 ,访问到 Prometheus 的 Web UI 界面
        点击页面的 Status -> Targets,如看到 Target 状态都为 UP,说明 Prometheus 能正常采集到数据
        http://192.168.231.100:9090/metrics ,可以看到 Prometheus 采集到自己的指标数据,其中 Help 字段用于解释当前指标的含义,Type 字段用于说明数据的类型

 2.エクスポーターの導入 

システムレベルのインジケーターを監視するために Node Exporter をデプロイします
(1) node_exporter-1.3.1.linux-amd64.tar.gz を /opt ディレクトリにアップロードし、解凍します。

cd /opt/
tar xf node_exporter-1.3.1.linux-amd64.tar.gz
mv node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin

 


(2) スタートアップファイルの設定

cat > /usr/lib/systemd/system/node_exporter.service <<'EOF'
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/node_exporter \
--collector.ntp \
--collector.mountstats \
--collector.systemd \
--collector.tcpstat

ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

systemctl start node_exporter
systemctl enable node_exporter

netstat -natp | grep :9100


(3) アクセステスト

ブラウザ アクセス: http://192.168.231.100:9100/metrics、Node Exporter によって収集されたインジケーター データを確認できます。

常用的各指标:
●node_cpu_seconds_total
●node_memory_MemTotal_bytes
●node_filesystem_size_bytes{mount_point=PATH}
●node_system_unit_state{name=}
●node_vmstat_pswpin:系统每秒从磁盘读到内存的字节数
●node_vmstat_pswpout:系统每秒钟从内存写到磁盘的字节数

更多指标介绍:https://github.com/prometheus/node_exporter

(4) prometheus 設定ファイルを変更し、prometheus 監視に追加します。

vim /usr/local/prometheus/prometheus.yml
#在尾部增加如下内容
  - job_name: nodes
    metrics_path: "/metrics"
    static_configs:
    - targets:
      - 192.168.231.102:9100
      - 192.168.231.103:9100
      - 192.168.231.110:9100
      labels:
        service: kubernetes


        
(5) 設定のリロード

curl -X POST http://192.168.231.100:9090/-/reload    或    systemctl reload prometheus
浏览器查看 Prometheus 页面的 Status -> Targets

 

3: MySQL の監視設定例

1. mysqld_exporter-0.14.0.linux-amd64.tar.gz を /opt ディレクトリにアップロードし、解凍します。

cd /opt/
tar xf mysqld_exporter-0.14.0.linux-amd64.tar.gz
mv mysqld_exporter-0.14.0.linux-amd64/mysqld_exporter /usr/local/bin/

 

 2. 起動ファイルの設定

cat > /usr/lib/systemd/system/mysqld_exporter.service <<'EOF'
[Unit]
Description=mysqld_exporter
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/mysqld_exporter --config.my-cnf=/etc/my.cnf

ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

 3. MySQL 構成ファイルを変更する

vim /etc/my.cnf
[client]
......
host=localhost
user=exporter
password=abc123

 4. エクスポーターユーザーを認可する

mysql -uroot -pabc123
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost' IDENTIFIED BY 'abc123';

 5. サービスを再起動します 

systemctl restart mysqld
systemctl start mysqld_exporter
systemctl enable mysqld_exporter

netstat -natp | grep :9104

 6. Prometheusサーバー上で操作する

(1) prometheus 設定ファイルを変更し、prometheus 監視に追加します。

vim /usr/local/prometheus/prometheus.yml
#在尾部增加如下内容
  - job_name: mysqld
    metrics_path: "/metrics"
    static_configs:
    - targets:
          - 192.168.231.101:9104
      labels:
        service: mysqld

 (2) 設定を再読み込みする

curl -X POST http://192.168.231.100:9090/-/reload    或    systemctl reload prometheus
浏览器查看 Prometheus 页面的 Status -> Targets


4: Nginx の監視構成例

#在 Nginx 服务器上操作
下载 nginx-exporter 地址:https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
下载 nginx 地址:http://nginx.org/download/
下载 nginx 插件地址:https://github.com/vozlt/nginx-module-vts/tags

1. nginxプラグインを解凍します。

cd /opt
tar xf nginx-module-vts-0.1.18.tar.gz
mv nginx-module-vts-0.1.18 /usr/local/nginx-module-vts

 2.Nginxをインストールする

yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx

cd /opt
tar xf nginx-1.24.0.tar.gz

cd nginx-1.24.0/
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--add-module=/usr/local/nginx-module-vts

make & make install

(1) nginxの設定ファイルを変更し、nginxを起動する

vim /usr/local/nginx/conf/nginx.conf
http {
    vhost_traffic_status_zone;                    #添加
    vhost_traffic_status_filter_by_host on;        #添加,开启此功能,在 Nginx 配置有多个 server_name 的情况下,会根据不同的 server_name 进行流量的统计,否则默认会把流量全部计算到第一个 server_name 上
    ......
    server {
    ......
    }
    
    server {
        vhost_traffic_status off;        #在不想统计流量的 server 区域,可禁用 vhost_traffic_status
        listen 8080;
        allow 127.0.0.1;
        allow 192.168.231.100;            #设置为 prometheus 的 ip 地址

        location /nginx-status {
            stub_status on;
            access_log off;
        }

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

#假如 nginx 没有规范配置 server_name 或者无需进行监控的 server 上,那么建议在此 vhost 上禁用统计监控功能。否则会出现 127.0.0.1、hostname 等的域名监控信息。

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx -t

cat > /lib/systemd/system/nginx.service <<'EOF'
[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

systemctl start nginx
systemctl enable nginx


浏览器访问:http://192.168.231.111:8080/status ,可以看到 Nginx Vhost Traffic Status 的页面信息

(2) nginx-exporterを解凍し、nginx-exporterを起動します

cd /opt/
tar -zxvf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
mv nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter /usr/local/bin/

cat > /usr/lib/systemd/system/nginx-exporter.service <<'EOF'
[Unit]
Description=nginx-exporter
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/nginx-vts-exporter -nginx.scrape_uri=http://localhost:8080/status/format/json

ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

systemctl start nginx-exporter
systemctl enable nginx-exporter

netstat -natp | grep :9913

3. Prometheusサーバー上で操作する

(1) prometheus 設定ファイルを変更し、prometheus 監視に追加します。

vim /usr/local/prometheus/prometheus.yml
#在尾部增加如下内容
  - job_name: nginx
    metrics_path: "/metrics"
    static_configs:
    - targets:
          - 192.168.231.111:9913
      labels:
        service: nginx


        
(2) 設定をリロードします
curl -X POST http://192.168.231.100:9090/-/reload または systemctl reload prometheus
ブラウザを使用して、[ステータス] -> [Prometheus のターゲット] ページを表示します。

 5: Grafana をデプロイする

1. ダウンロードしてインストールします

下载地址:https://grafana.com/grafana/download
          https://mirrors.bfsu.edu.cn/grafana/yum/rpm/

yum install -y grafana-7.4.0-1.x86_64.rpm

systemctl start grafana-server
systemctl enable grafana-server

netstat -natp | grep :3000

浏览器访问:http://192.168.231.100:3000 ,默认账号和密码为 admin/admin

  2. データソースの構成

Configuration -> Data Sources -> Add data source -> 选择 Prometheus
HTTP -> URL 输入 http://192.168.231.100:9090
点击 Save & Test

点击 上方菜单 Dashboards,Import 所有默认模板
Dashboards -> Manage ,选择 Prometheus 2.0 Stats 或 Prometheus Stats 即可看到 Prometheus job 实例的监控图像

 3. grafana監視パネルのインポート

浏览器访问:https://grafana.com/grafana/dashboards ,在页面中搜索 node exporter ,选择适合的面板,点击 Copy ID 或者 Download JSON

在 grafana 页面中,+ Create -> Import ,输入面板 ID 号或者上传 JSON 文件,点击 Load,即可导入监控面板

 

6: Prometheus サービス ディスカバリーをデプロイする 

1. ファイルベースのサービス検出

ファイルベースのサービス ディスカバリは、静的構成サービス ディスカバリよりわずかに優れているだけであり、プラットフォームやサードパーティ サービスに依存しないため、最もシンプルで最も一般的な実装方法でもあります。
Prometheus Server は、ファイルからターゲット情報を定期的に読み込みます。ファイルには YAML および JSON 形式を使用できます。このファイルには、定義されたターゲット リストとオプションのタグ情報が含まれています。(1) サービスディスカバリ用のファイルを作成し、ファイル内に必要なターゲットを設定します 

cd /usr/local/prometheus
mkdir targets

vim targets/node-exporter.yaml
- targets:
  - 192.168.231.102:9100
  - 192.168.231.103:9100
  labels:
    app: node-exporter
    job: node


vim targets/mysqld-exporter.yaml
- targets:
  - 192.168.231.101:9104
 
  labels:
    app: mysqld-exporter
    job: mysqld

#修改 prometheus 配置文件,发现 target 的配置,定义在配置文件的 job 之中
vim /usr/local/prometheus/prometheus.yml
......
scrape_configs:
  - job_name: nodes
    file_sd_configs:                  #指定使用文件服务发现
    - files:                          #指定要加载的文件列表
      - targets/node*.yaml            #文件加载支持通配符
      refresh_interval: 2m            #每隔 2 分钟重新加载一次文件中定义的 Targets,默认为 5m
  
  - job_name: mysqld
    file_sd_configs:
    - files:
      - targets/mysqld*.yaml
      refresh_interval: 2m


systemctl reload prometheus
浏览器查看 Prometheus 页面的 Status -> Targets

2. Consul に基づくサービス検出

Consul は golang をベースに開発されたオープンソース ツールで、主に分散型およびサービス指向システム向けのサービス登録、サービス検出、構成管理機能を提供します。
       サービス登録/検出、ヘルスチェック、Key/Valueストレージ、マルチデータセンター、分散整合性保証などの機能を提供します。

下载地址:https://www.consul.io/downloads/

(1)部署 Consul 服务
cd /opt/
unzip consul_1.9.2_linux_amd64.zip
mv consul /usr/local/bin/

#创建 Consul 服务的数据目录和配置目录
mkdir /var/lib/consul-data
mkdir /etc/consul/

#使用 server 模式启动 Consul 服务
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-config-dir=/etc/consul/ \
-bind=192.168.80.30 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &

#查看 consul 集群成员
consul members

(2)在 Consul 上注册 Services
#在配置目录中添加文件
vim /etc/consul/nodes.json
{
  "services": [
    {
      "id": "node_exporter-node01",
      "name": "node01",
      "address": "192.168.80.30",
      "port": 9100,
      "tags": ["nodes"],
      "checks": [{
        "http": "http://192.168.80.30:9100/metrics",
        "interval": "5s"
      }]
    },
    {
      "id": "node_exporter-node02",
      "name": "node02",
      "address": "192.168.80.15",
      "port": 9100,
      "tags": ["nodes"],
      "checks": [{
        "http": "http://192.168.80.15:9100/metrics",
        "interval": "5s"
      }]
    }
  ]
}

#让 consul 重新加载配置信息
consul reload        

浏览器访问:http://192.168.80.30:8500

(3)修改 prometheus 配置文件
vim /usr/local/prometheus/prometheus.yml
......
  - job_name: nodes
    consul_sd_configs:                  #指定使用 consul 服务发现
    - server: 192.168.80.30:8500        #指定 consul 服务的端点列表
      tags:                             #指定 consul 服务发现的 services 中哪些 service 能够加入到 prometheus 监控的标签
      - nodes
      refresh_interval: 2m


systemctl reload prometheus
浏览器查看 Prometheus 页面的 Status -> Targets

#让 consul 注销 Service
consul services deregister -id="node_exporter-node02"

#重新注册
consul services register /etc/consul/nodes.json

3. Kubernetes API に基づくサービス検出

Kubernetes API に基づくサービス検出メカニズムは、API サーバーのノード、サービス、エンドポイント、ポッド、イングレスなどのリソース タイプに対応するリソース オブジェクトをターゲットとしてサポートし、関連リソースの変更を継続的に監視します。

●ノード、サービス、エンドポイント、ポッド、およびイングレスのリソースは、それぞれの検出メカニズムによって定義されます。

●各タイプのリソース オブジェクトの検出を担当するコンポーネント。Prometheus ではロールと呼ばれます。

●各 Node ノードを検出するため、DaemonSet コントローラーに基づいてクラスター上にノード エクスポーターをデプロイすることをサポートし、kubelet を通じて各 Node ノードを検出する Prometheus の入り口としても使用できます。

#基于 Kubernetes 发现机制的部分配置参数
# The API server addresses. If left empty, Prometheus is assumed to run inside of the cluster and will discover API servers automatically
and use the pod's
# CA certificate and bearer token file at /var/run/secrets/kubernetes.io/serviceaccount/.
[ api_server: <host> ]

# The Kubernetes role of entities that should be discovered. One of endpoints, service, pod, node, or ingress.
role: <string>

# Optional authentication information used to authenticate to the API server.
# Note that 'basic_auth', 'bearer_token'和'bearer_token_file' 等认证方式互斥;
[ bearer_token: <secret> ]
[ bearer_token_file: <filename> ]

# TLS configuration.
tls_config:
# CA certificate to validate API server certificate with.
[ ca_file: <filename> ]

# Certificate and key files for client cert authentication to the server.
[ cert_file: <filename> ]
[ key_file: <filename> ]

# ServerName extension to indicate the name of the server.
[ server_name: <string> ]

# Optional namespace discovery. If omitted, all namespaces are used.
namespaces:
names:
[ - <string> ]

おすすめ

転載: blog.csdn.net/A1100886/article/details/132427654
おすすめ