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