如何使用Prometheus对Docker容器进行监控

时间:2020-03-05 15:25:26  来源:igfitidea点击:

Prometheus是来自SoundCloud的下一代开源监控系统,旨在监控,如指标的生成和集合,在仪表板上绘制结果数据,并在本教程中提醒异常等,我们将安装/配置以下组件:

i)Prometheus作为Docker服务,尽管它可以作为二进制文件安装或者由源代码构建。
ii)公开主机指标的ProMetheus节点出口商。
III)Grafana面对Prometheus。
IV)Prometheus AlertManager将根据一些标准生成警报,并将其发送到电子邮件,Hipchat,Slacks等v)CAdvidior收集,汇总,进程和导出有关运行容器的信息。

组件

Prometheus的主要功能是在预定义指标上查询Docker服务,创建图形,查询数据库,检查服务的运行状况,并根据警报规则通知AlertManager。
通知的执行是由AlertManager和Pipchat,Slacks,Email等的不同通道的警报完成的。
警报管理器还可以抑制通知如果它具有相同的源,以免避免垃圾邮件。
节点导出器收集主机/存储器/存储使用等系统矩阵,并以其了解的格式导出到Prometheus。
最后,CAdvisor对主机系统内的容器进行刮擦信息,并将此数据发送到Prometheus。

要求

要安装上述组件,请确保已安装这两个准备工作i)Docker II)Docker-Compose。

安装prometheus.

让我们创建一个非常简单的Docker组件。
yml配置文件和prometheus配置文件prometheus。
yml安装prometheus。

# docker-compose.yml
version: '2'
services:
  prometheus:
     image: prom/prometheus:latest
     volumes:
       - ./prometheus.yml:/etc/prometheus/prometheus.yml            
     command:
       - '--config.file=/etc/prometheus/prometheus.yml'
     ports:
       - '9090:9090'

Prometheus配置文件 -

# prometheus.yml
global:
 scrape_interval: 5s
 external_labels:
   monitor: 'my-monitor'
rule_files:
 - 'alert.rules'
scrape_configs:
 - job_name: 'prometheus'
   static_configs:
     - targets: ['123.45.67.89:9090']

内部Docker组合。
yml在卷标记下将Prometheus Config文件作为卷的映射到容器中完成,并将Config参数添加到指向此文件的命令。
让我们使用以下命令启动Prometheus。

root@demohost:~#  docker-compose up

现在将浏览器指向"http://target-ip-adress:9090"以确认服务器正在运行,然后单击"状态"以检查我们提供的配置文件。

可以通过访问http://target-ip-adress:9090/metrics从状态菜单中点击目标选项来检查原始度量标准,我们会发现prometheus状态已启动。

安装节点出口商.

节点导出器公开其运行的主机的ProMetheus度量标准,并显示机器的文件系统,网络设备,处理器,内存用量和其他功能。
节点导出器可以作为Docker容器运行,同时报告主机系统的统计数据。
我们将将配置设置添加到现有的Docker撰写。
yml和prometheus。
yml为节点出口商带来生命。

# docker-compose.yml
version: '2'
services:
  prometheus:
     image: prom/prometheus:latest
     volumes:
       - ./prometheus.yml:/etc/prometheus/prometheus.yml           
     command:
       - '--config.file=/etc/prometheus/prometheus.yml'
     ports:
       - '9090:9090'
  node-exporter:
     image: prom/node-exporter
     ports:
       - '9100:9100'

Prometheus配置文件 -

# prometheus.yml
global:
 scrape_interval: 5s
 external_labels:
   monitor: 'my-monitor'
rule_files:
 - 'alert.rules'
scrape_configs:
 - job_name: 'prometheus'
   static_configs:
     - targets: ['123.45.67.89:9090']
 - job_name: 'node-exporter'
   static_configs:
     - targets: ['node-exporter:9100']

在Prometheus。
YML,我们通过在Docker-Compose中定义的服务名称引用节点导出器。
yml重新启动docker-composer

root@demohost:~#  docker-compose restart

现在单击"状态"选项从"状态"菜单中,我们会发现节点导出器状态已启动和健康。

我们现在将执行查询以测试Prometheus的丰富功能。
单击菜单列中的"图形",然后从下拉框中选择任何指标,然后单击"执行"。
按"图形"选项卡查看图形。

安装grafana.

截至目前我们已安装和配置Prometheus Server和Node Exporter。
现在让我们设置Grafana,这是一个图形界面,具有带仪表板的仪表板,支持Prometheus作为对数据进行查询以生成图形的后端。

虽然Prometheus具有内置的图形功能,但可以通过其Web界面访问,但Grafana提供更强大的功能。
将以下行添加到Docker-Compose。
yml设置grafana仪表板。

……
……
  grafana:
     image: grafana/grafana
     user: "0" #[ Execute  id -u in terminal to find the user id from where you are invoking docker compose]
     volumes:
       - ./grafana_db:/var/lib/grafana
     environment:
       - GF_SECURITY_ADMIN_PASSWORD=yourpass
     depends_on:
       - prometheus
     ports:
       - '3000:3000'
…….
…….

将浏览器指向"http://prometheus-ip:3000"以访问Grafana。
使用用户的管理员'和密码作为'admin_password'登录grafana。
我们将被带到Grafana仪表板。

已成功登录Grafana仪表板后,单击Grafana图标,然后单击"数据源",最后是"添加数据源",如下图所示。

在"配置"选项卡下的"添加数据源"页面中,提供数据源的名称,键入prometheus。
在HTTP设置中,将URL提供为Prometheus Server IP并直接访问,然后单击"添加"。

添加数据源后,单击仪表板选项卡并导入我们刚才创建的数据源。
我们将找到具有修订版1的新创建的仪表板。

现在单击主页图标,然后选择在上一步中创建的propetheus仪表板。

为了确保数据实际上仍然存在于Docker卷中,我们在Docker-Compose中添加了以下两行。
yml确保在工作目录中使用这两个目录,prometheus_db和grafana_db。

volumes:
- ./prometheus_db:/var/lib/prometheus
...............
...............
volumes:
- ./grafana_db:/var/lib/grafana

警报/通知

我们现在将配置警报规则来根据Prometheus跟踪的度量标准来检测事件。
其中我们将在触发警报时,我们将使用Alert-Manager组件向HIPchat帐户发送通知。

要设置通知,我们需要配置三个文件警报。
定义将在Docker-Compose中将其与容器映射到该警报的规则的规则。
YML编辑Prometheus。
YML将AlertManager添加为服务。

我们将在警报中添加以下两个警报规则1)service_down 2)high_load。
规则

groups:
- name: alert.rules
  rules:
  - alert: service_down
    expr: up == 0
  - alert: high_load
    expr: node_load1 > 0.5
    annotations:
      description: '{{ $labels.instance }} of job {{ $labels.job }} is under high
        load.'
      summary: Instance {{ $labels.instance }} under high load

映射Docker-Compose中的警报规则。
yml,将以下行添加到Docker-Compose中普通服务服务的卷部分。
yml.

version: '2'
services:
  prometheus:
     image: prom/prometheus:latest
     volumes:
       - ./prometheus.yml:/etc/prometheus/prometheus.yml
       - ./prometheus_db:/var/lib/prometheus
       - ./alert.rules:/etc/prometheus/alert.rules
………….
………….

最后编辑Prometheus。
yml告诉prometheus关于规则文件的路径。

rule_files:
 - 'alert.rules'
......................
......................

让我们使用以下命令重新启动容器 -

root@demohost:~# docker-compose restart

一旦Docker将启动,请单击Prometheus仪表板中的警报,我们可以查看警报。

由于我们已经使用负载平均值大于0. 5来定义警报,因此通过使用以下命令创建负载,让我们通过创建负载来触发此警报。

root@demohost:~#  docker run --rm -it busybox sh -c "while true; do :; done"

几秒钟后,我们将看到警报High_load处于活动状态。

请记住,提醒自己是指标意味着可以在Grafana仪表板中查看警报。
为此,请单击"添加行" - >单击"左侧" - >"添加"面板 - >"图表"的"汉堡包"菜单。
选择面板数据源作为Prometheus,将鼠标光标放在Metric查找框中,我们将在指标的顶部找到警报。

从丢弃框中选择"Prometheus"并从度量标准查找检查"警报"

高负荷警报现在在Grafana仪表板上可见。

现在回到警报经理,我们将在Docker-Compose中为它添加几行。
yml就像我们为prometheus和出口商那样做了它。
我们的Docker-Compose的最终配置。
yml看起来像这样。

# docker-compose.yml
version: '2'
services:
  prometheus:
     image: prom/prometheus:latest
     volumes:
       - ./prometheus.yml:/etc/prometheus/prometheus.yml
       - ./prometheus_db:/var/lib/prometheus
       - ./alert.rules:/etc/prometheus/alert.rules
     command:
       - '--config.file=/etc/prometheus/prometheus.yml'
     ports:
       - '9090:9090'
     depends_on:
       - alertmanager
  node-exporter:
     image: prom/node-exporter
     ports:
       - '9100:9100'
  grafana:
     image: grafana/grafana
     user: "0"
     volumes:
       - ./grafana_db:/var/lib/grafana
     environment:
       - GF_SECURITY_ADMIN_PASSWORD=yourpass
     depends_on:
       - prometheus
     ports:
       - '3000:3000'
  alertmanager:
     image: prom/alertmanager:latest
     volumes:
       - ./alertmanager.yml:/alertmanager.yml
     command:
       - '--config.file=/etc/alertmanager/alertmanager.yml'
     ports:
       - '9093:9093'

这一切都需要完成来配置警报管理器并连接Prometheus,但我们仍然需要创建AlertManager。
yml。
在此之前,让我们配置警报接收器。

配置警报接收器

登录HIPCHAT帐户 - >选择房间 - >集成现在单击"构建我们自己的集成"

给集成的名称,然后单击"创建"。

注意,我们将在配置AlertManager中使用的空间否和身份验证令牌。
conf

这是我们的警惕管理器。
yml配置为将警报发送到HIPChat帐户。
我们可以在此文件中添加更多的接收器,如松弛,电子邮件等。

global:
  hipchat_auth_token: 'xxx'
  hipchat_api_url: 'https://api.hipchat.com/'
route:
  group_by: [cluster]
  receiver: team-hipchat
  routes:
  - match:
      severity: hipchat
    receiver: team-hipchat
receivers:
  - name: team-hipchat
    hipchat_configs:
    - auth_token: 'yyy'
      room_id: 12345
      message_format: html
      notify: true

通过Prometheus触发警报,警报管理器将发送给上述HIPChat帐户的警报。
我们可以通过导航到聊天历史记录来验证它。

CADE.

要安装CAdvisor,请将以下行添加到Docker-Compose。
yml.

..............
..............
  cadvisor:
     image: google/cadvisor:latest
     ports:
       - '8080:8080'
     volumes:
       - /:/rootfs:ro
       - /var/run:/var/run:rw
       - /sys:/sys:ro
       - /var/lib/docker/:/var/lib/docker:ro

此外,还可以进入Prometheus的Cafvisor服务。
yml.

..............
..............
 - job_name: 'cAdvisor'
   static_configs:
     - targets: ['123.45.67.89:8080']

就是这样,我们通过CADDISE完成。
重新启动Docker-Compose

root@demohost:~# docker-compose restart

将浏览器指向http://target-ip:9090 /目标,以检查CADVISOR状态。
如果没有错误,它的状态将升级。

要检查容器指标,请单击顶部菜单列中的"图表",然后从下拉列表中选择任何容器参数,然后单击"执行"。
选择"图形"选项卡以根据我们刚才选择的容器指标查看图表。