Linux-Dockerモニタリング

Dockerモニタリング

軽量システムモニター

1つ、sysdig

sysdigコンテナを実行します

[root@docker ~]# docker  pull sysdig/sysdig
[root@docker ~]# docker run -it --rm --name sysdig --privileged=true --volume=/var/run/docker.sock:/host/var/run/docker.sock  --volume=/dev:/host/dev --volume=/proc:/host/proc:ro --volume=/boot:/host/boot:ro --volume=/lib/modules:/host/lib/modules:ro --volume=/usr:/host/usr:ro sysdig/sysdig

プラグインのダウンロードが失敗した後、次のコマンドを実行して再度ダウンロードできます

root@358c10c2ca15:/# sysdig-probe-loader 

ダウンロードが成功したら、sysdigコマンドを実行して、監視対象のアイテムを表示できます。

root@358c10c2ca15:/# csysdig

ここに画像の説明を挿入

二、織りスコープ

グラフィカル表示、コンテナリソースの使用状況を直感的に確認でき、コンテナを理解、監視、制御しやすい

  • スコープは、単一のドッカーホストまたは複数のドッカーホストを監視できます。監視効果は、スコープ起動ローカルIPアドレスおよびその他のIPアドレスを実行するだけで済みますが、複数のドッカーホストがある場合は、実行する前にホスト名を確認してください。競合しない、ホスト名を区別します。
  • このサービスはホストのポート4040を開きます。このサービスを使用するユーザーはアクセスできますが、同様に、クラスター外のIPアドレスの場合もこのサービスにアクセスでき、スコープには現在USERアクセス制限がありません。 。したがって、このサービスを使用する場合は、ポート4040へのホストのアクセスを厳密に管理する必要があります。また、デフォルトのポートを変更することをお勧めします。
[root@docker ~]# curl -L git.io/scope -o /usr/local/bin/scope
[root@docker ~]# chmod  a+x /usr/local/bin/scope 
[root@docker ~]# scope  launch
Unable to find image 'weaveworks/scope:1.13.1' locally
1.13.1: Pulling from weaveworks/scope
c9b1b535fdd9: Pull complete 
550073704c23: Pull complete 
8738e5bbaf1d: Pull complete 
0a8826d26027: Pull complete 
387c1aa951b4: Pull complete 
e72d45461bb9: Pull complete 
75cc44b65e98: Pull complete 
11f7584a6ade: Pull complete 
a5aa3ebbe1c2: Pull complete 
7cdbc028c8d2: Pull complete 
Digest: sha256:4342f1c799aba244b975dcf12317eb11858f9879a3699818e2bf4c37887584dc
Status: Downloaded newer image for weaveworks/scope:1.13.1
dd8502a30203e4c17604ce589fe21413103d4977632321892315359233b1fb43
Scope probe started
Weave Scope is listening at the following URL(s):
  * http://192.168.122.1:4040/
  * http://192.168.1.40:4040/

ここに画像の説明を挿入

三、プロメテウス(プロメテウス)

プロメテウス公式サイト

成分 説明
プロメテウスサーバー Prometheusのメインサーバー
NodeEXporter ホストハードウェア情報とオペレーティングシステム情報の収集を担当します
cAdvisor ホストで実行されているコンテナに関する情報を収集する責任があります
グラファナ Prometheusモニタリングインターフェイスの表示を担当

周囲:

ホスト名 IPアドレス コンポーネントをインストールする
マシン(プライマリサーバー) 192.168.1.40 NodeEXporter、cAdvisor、Prometheus Server、Grafana
node01 192.168.1.41 NodeEXporter、cAdvisor
node02 192.168.1.42 NodeEXporter、cAdvisor

1. node-EXporter、およびcAdvisorをデプロイします

すべてのサーバーが展開されます

[root@docker ~]# docker run -d --name node-EXporter -p 9100:9100 -v /proc:/host/proc -v /sys:/host/sys -v /:/rootfs --net=host prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"

PS:ここでは–net = hostが使用されているため、PrometheusServerはNode-EXporterと直接通信できます。

ここに画像の説明を挿入

2.cAdvisorをデプロイしてインストールします

すべてのサーバーが展開されます

[root@docker ~]# docker run -v /:/rootfs:ro -v /var/run:/var/run/:rw -v /sys:/sys:ro -v /var/lib/docker:/var/lib/docker:ro -p 8080:8080 --detach=true --name=cadvisor --net=host google/cadvisor

ここに画像の説明を挿入

3.マシンホストにPrometheusServerサービスを展開します。

prometheusをデプロイする前に、その構成ファイルを変更する必要があるため、最初にコンテナーを実行し、最初にその構成ファイルをコピーします。

[root@machine ~]#  docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
[root@machine ~]#  docker cp prometheus:/etc/prometheus/prometheus.yml ./
[root@machine ~]# cat prometheus.yml 
......
    static_configs:
    - targets: ['localhost:9090','localhost:8080','localhost:9100','192.168.1.41:8080','192.168.1.41:9100','192.168.1.42:8080','192.168.1.42:9100']
[root@machine ~]# docker rm -f prometheus 
prometheus
[root@machine ~]# docker run -d -p 9090:9090 --name prometheus --net=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
WARNING: Published ports are discarded when using host network mode
88565574609b515e7ff6785e834a26e223ced08f6c90a4cbd502e0d52579225e

PS:プロメテウスの監視項目はここで指定されています。これには、独自のマシンからのデータも監視されます。
ここに画像の説明を挿入
ここに画像の説明を挿入
PS:ここでは私たちのさまざまな監視項目を見ることができます。

4.マシンにgrafanaサービスをデプロイします

[root@machine ~]# mkdir grafana-storage
[root@machine ~]# chmod 777 -R grafana-storage/
[root@machine ~]# docker run -d -p 3000:3000 --name grafana -v /root/grafana-storage:/var/lib/grafana -e "GF_SECURITY_ADMIN_PASSWORD=123.com" grafana/grafana

アカウント:管理者
パスワード:123.com
ここに画像の説明を挿入
ここに画像の説明を挿入

5.監視データを追加します

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

6.監視テンプレートをインポートします

テンプレートの公式ウェブサイトは次のとおりです。https://grafana.com/

1.テンプレートのID番号を追加します
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
。2。JSONファイルからテンプレートを使用します。
ここに画像の説明を挿入

4、メールアラーム

1.AlertManagerを構成します

[root@machine ~]# docker run --name alertmanager -d -p 9093:9093 prom/alertmanager:latest
[root@machine ~]# docker cp  alertmanager:/etc/alertmanager/alertmanager.yml ./
[root@machine ~]# cp alertmanager.yml alertmanager.ymlbak

PS:アラームをトリガーするアラームルールを設定していないため、アラーム情報はありません

ここに画像の説明を挿入

2.AlertManagerは電子メールアラートを構成します

1.SMTPサービスをオンにします

PS:ここでは163のメールボックスが使用されていますが、他のメールボックスも使用できます。方法は同じです。
ここに画像の説明を挿入

2.構成ファイルを変更します

主な構成の役割:

  • グローバル:アラームが解決された後のタイムアウト期間、SMTP関連の構成、さまざまなチャネル通知のAPIアドレスなどを含むグローバル構成。
  • ルート:アラーム分散戦略を設定するために使用されます。これはツリー構造であり、最初に左から右に深さの順序で一致します。
  • 受信者:一般的に使用される電子メール、wechat、slack、webhook、その他のメッセージ通知方法など、アラームメッセージの受信者情報を構成します。
  • invalid_rules:抑制ルールの構成。別のグループに一致するアラーム(ソース)がある場合、抑制ルールはグループに一致するアラーム(ターゲット)を無効にします。
[root@machine ~]# cat alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_from: '******@163.com'
  smtp_smarthost: 'smtp.163.com:465'
  smtp_auth_username: '*******@163.com'
  smtp_auth_password: '********'
  smtp_require_tls: false
  smtp_hello: '163.com'
route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 5m
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:
  - to: '[email protected]'
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
[root@machine ~]# docker rm -f alertmanager 
alertmanager
[root@machine ~]# docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager:latest 
8a9835e97f039921187a85a2e71a8c869342a4f6aa721fadb9d4a27a9bc2728e

上記のテンプレートに含まれる163のメールボックスは、独自のメールボックスに置き換えることができ、認証コードは同じです。

上記の構成を繰り返し試したところ、環境パラメーターの構成が異なり、デバッグ中にさまざまなエラー報告の問題が発生したことがわかりました。いくつかの重要な構成を次に示します。

  • smtp_smarthost:これは163メールボックスのSMTPサービスアドレスです。公式アドレスはsmtp.163.comで、ポートは465または587です。POP3/ SMTPサービスを有効に設定する必要があります。
  • smtp_auth_password:サードパーティが163メールボックスにログインするための認証コードは次のとおりです。ログインパスワードが163アカウントのものでない場合、エラーが報告されます。POP3/ SMTPサービスが次の場合、取得方法が求められます。 163メールボックスサーバーに設定されます。
  • smtp_require_tls:tlsを使用するかどうかは、環境に応じて、開くか閉じるかを選択します。エラーが表示された場合email.loginAuthfailed:530最初にSTARTTLSコマンドを発行する必要があり、次にtrueに設定する必要があります。強調して説明すると、tlsがオンになっている場合、starttlsが失敗したというエラーが表示されます:x509:不明な権限によって署名された証明書、tls検証をスキップするにはemail_configsでsecure_skip_verify:trueを構成する必要があります

3.AlertManagerアラートルールを構成します

プロメテウス公式ウェブサイトルールリファレンス

[root@machine ~]# mkdir -p prometheus/rules
[root@machine ~]# cd prometheus/rules/
[root@machine rules]# cat  node-up.rules 
groups:
- name: node-up
  rules:
  - alert: node-up   #告警名称
    expr: up{job="prometheus"} == 0   #和之前的Prometheus.yml里Job name相对应
    for: 15s   # 15秒之后会告警
    labels:
      severity: 1     #严重重读
      team: node
    annotations:
      summary: "{
   
   { $labels.instance }} 已停止运行超过 15s!"
[root@machine ~]# vim prometheus.yml 
......
# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
       - 192.168.1.40:9093   #打开监听端扣

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  - "/usr/local/prometheus/rules/*.rules"  #添加规则文件路径,注意事项容器内路径!!!
  # - "first_rules.yml"
  # - "second_rules.yml"
  ......
[root@machine ~]# docker rm -f prometheus 
prometheus
[root@machine ~]# docker run -d -p 9090:9090 -v /root/prometheus.yml:/etc/prometheus/prometheus.yml -v /root/prometheus/rules:/usr/local/prometheus/rules --name prometheus --net=host prom/prometheus
WARNING: Published ports are discarded when using host network mode
22e16c5d8a36d9e993105b29afc4490c9f6fa0e20d7813c3c93105e95c1c1522

PS:ルールの目的は、ノードが生きているかどうかを監視することです。exprは、特定のノードjob = "node-exporter"が生きているかどうかを確認するための、PromQL式です。つまり、アラーム状態は保留中で、15秒待機します。発火状態になります。発火状態になると、アラームがAlertManagerに送信され、ラベルと注釈によってアラートに識別情報が追加され、追加されたすべてのラベル注釈情報が追加され、prometheus.ymlに追加されたジョブのラベルが自動的に追加されます。メールの内容に追加されました。

ここに画像の説明を挿入
ここに画像の説明を挿入

4.アラームをトリガーしてEメールを送信します

PS:node01のエクスポーターコンポーネントを閉じることができませんでした

[root@docker01 ~]# docker stop zealous_mclean 
zealous_mclean

ここに画像の説明を挿入
ここに画像の説明を挿入

5.AlertManagerはカスタムメールテンプレートを設定します

[root@machine ~]# cd prometheus/
[root@machine prometheus]# mkdir alertmanager-tmpl
[root@machine prometheus]#  cd alertmanager-tmpl/
[root@machine alertmanager-tmpl]# vim email.tmpl 
{
    
    {
    
     define "email.from" }}wfp88888@163.com{
    
    {
    
     end }}
{
    
    {
    
     define "email.to" }}wfp88888@163.com{
    
    {
    
     end }}
{
    
    {
    
     define "email.to.html" }}
{
    
    {
    
     range .Alerts }}
=========start==========<br>
告警程序: prometheus_alert<br>
告警级别: {
    
    {
    
     .Labels.severity }} 级<br>
告警类型: {
    
    {
    
     .Labels.alertname }}<br>
故障主机: {
    
    {
    
     .Labels.instance }}<br>
告警主题: {
    
    {
    
     .Annotations.summary }}<br>
触发时间: {
    
    {
    
     .StartsAt.Format "2020-09-18 19:25:00" }} <br>
=========end==========<br>
{
    
    {
    
     end }}
{
    
    {
    
     end }}
[root@machine alertmanager-tmpl]# cd
[root@machine ~]# vim alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_from: '******@163.com'
  smtp_smarthost: 'smtp.163.com:465'
  smtp_auth_username: '*******@163.com'
  smtp_auth_password: '********'
  smtp_require_tls: false
  smtp_hello: '163.com'
templates:
  - '/etc/alertmanager-tmpl/*.tmpl'   #这里的路径是容器内的路径
route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 5m
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:
  - to: '{
    
    { template "email.to" }}'
    html: '{
    
    { template "email.to.html" . }}' #发送的html,从我们自定的模板找那个获取!
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
 
[root@machine ~]# docker rm -f alertmanager 
alertmanager
[root@machine ~]# docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml -v /root/prometheus/alertmanager-tmpl:/etc/alertmanager-tmpl prom/alertmanager
12aacd93931b5ec4563be8a1167437054d036ffb556c3ce0659df5ddd1c1d331

PS:node01のエクスポーターシミュレーションコンポーネントを再び閉じることができませんでした

[root@docker01 ~]# docker stop zealous_mclean 
zealous_mclean

ここに画像の説明を挿入
時刻が間違っていることがわかりますが、これはメールがグローバルサービスであるため、文を変更してトンバ地区の時刻を時刻に追加する必要があります。

...
[root@machine ~]# vim prometheus/alertmanager-tmpl/email.tmpl 
......
10 告警主题: {
    
    {
    
     .Annotations.summary }}<br>
11 触发时间: {
    
    {
    
     (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" <br>
...
[root@machine ~]# docker restart  alertmanager 
alertmanager

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_45191791/article/details/108654012