docker+prom+grafana+altermanager

docker基础

docker run -it --name centos -v $HOME:/tmp -p 8080:8080 centos
docker inspect container   #查看已启动容器启动命令
docker container prune    #删除退出的容器
docker ps -a --no-trunc    #查看容器启动参数

反查dockerfile

方法一:
docker history --format {{.CreatedBy}} --no-trunc=true 0e0218889c33|sed "s?/bin/sh\ -c\ \#(nop)\ ??g"|sed "s?/bin/sh\ -c?RUN?g" | tac


方法二:
apt-get install npm    #管理前端包工具
npm install npx
npx dockerfile-from-image node:8 > dockerfile   #解析dockerfile

修改容器镜像的启动命令 -- docker 修改启动命令

#使用宿主机网络,并将容器名称修改为prometheus,-d后台运行
docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus

#将容器里文件拷贝出来到root目录
docker cp prometheus:/etc/prometheus/prometheus.yml /root/

#修改后挂载加进去
docker run -d -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml   \
-p 9090:9090 --name prometheus --net=host prom/prometheus



docker logs contianid   #查看日志
docker search  java    #从docker hub中搜索java镜像,可以查看版本

容器端口

9100 node-export
9090 prometheus
3000 grafana

启动

  • 启动node-exporter
docker run -d --name=node-exporter -p 9100:9100 prom/node-exporter
  • 启动grafana
  密码:admin,admin;配置文件/etc/grafana
  docker run -d --name=grafana -p 3000:3000 grafana/grafana
  • 启动prom
#将容器里文件拷贝出来到root目录
docker cp prometheus:/etc/prometheus/prometheus.yml /root/

#修改后挂载加进去
docker run -d -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml   \
-p 9090:9090 --name prometheus --net=host prom/prometheus

docker 镜像自启动

  • 在运行docker容器时可以加如下参数来保证每次docker服务重启后容器也自动重启:
docker run --restart=always
如果已经启动了则可以使用如下命令:
docker update --restart=always <CONTAINER ID>

配置文件

prom配置

配置帮助


global:
  #默认情况下抓取目标的频率.
  [ scrape_interval: <duration> | default = 1m ]

  # 抓取超时时间.
  [ scrape_timeout: <duration> | default = 10s ]

  # 评估规则的频率.
  [ evaluation_interval: <duration> | default = 1m ]

  # 与外部系统通信时添加到任何时间序列或警报的标签
  #(联合,远程存储,Alertma# nager).
  external_labels:
    [ <labelname>: <labelvalue> ... ]

# 规则文件指定了一个globs列表. 
# 从所有匹配的文件中读取规则和警报.
rule_files:
  [ - <filepath_glob> ... ]

# 抓取配置列表.
scrape_configs:
  [ - <scrape_config> ... ]

# 警报指定与Alertmanager相关的设置.
alerting:
  alert_relabel_configs:
    [ - <relabel_config> ... ]
  alertmanagers:
    [ - <alertmanager_config> ... ]

# 与远程写入功能相关的设置.
remote_write:
  [ - <remote_write> ... ]

# 与远程读取功能相关的设置.
remote_read:
  [ - <remote_read> ... ]

具体配置

root@ubuntu:~# cat prometheus.yml 
# my global config
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.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

  - job_name: prometheus
    static_configs:
    - targets: ['192.168.191.128:9090']
      labels:
        instance: prometheus
  - job_name: 'consul' #prometheus与consul配置段
    consul_sd_configs:
      - server: '192.168.191.128:8500'
        services: [ ]
  - job_name: node-exporter
    static_configs:
    - targets: ['192.168.191.128:9100']
      labels:
        instance: node-exporter

动态配置file_sd_config:

  • 修改/usr/local/prometheus/*.json增加删除,支持动态更新
在prometheus.yaml配置文件最后增加
  - job_name: 'node-discorvery'   #发现规则名称
    file_sd_configs:                       #选择适配器
      - files: 
        - /usr/local/prometheus/*.json   #匹配文件


在对应目录/usr/local/prometheus/*.json添加,容器启动时需要挂载进去
[
  {
    "targets": [ "10.10.2.99:9100"],
    "labels": {
      "job": "linux-bj",
      "idc": "bj-jiuxianqiao"
    }
  },
  {
    "targets": [ "10.10.2.62:9100","10.10.1.35:9100"],
    "labels": {
      "job": "linux-gx",
      "idc": "gz-daxuecheng"
    }
  }
]

rule_files:配置

  • 配置告警规则,在prometheus.yml中指定规则文件目录
  • prometheus根据这些规则信息,会推送报警信息到alertmanager中。

alertmanager_config:配置

  • 指定Prometheus服务器向其发送警报的Alertmanager实例
  • 提供参数以配置如何与这些Alertmanagers进行通信。
  • Alertmanagers支持静态指定或者动态发现指定
  • relabel_configs允许从发现的实体中选择Alertmanagers,并对使用的API路径提供高级修改,该路径通过__alerts_path__标签公开
# Alertmanager configuration   #告警配置
alerting:
  alertmanagers:  
  - static_configs:  #告警规则,也可以基于动态的方式进行告警。
    - targets:     
      # - alertmanager:9093

remote_write

指定后端的存储的写入api地址。

remote_read

指定后端的存储的读取api地址。

relabel_config

  • 重新标记是一种强大的工具,可以在抓取目标之前动态重写目标的标签集。 每个抓取配置可以配置多个重新标记步骤。 它们按照它们在配置文件中的出现顺序应用于每个目标的标签集。标签默认在prometheus web console可以看到相关的标签:
    docker+prom+grafana+altermanager

使用

promtheus

docker+prom+grafana+altermanager

node_cpu_seconds_total{cpu="0"}
docker+prom+grafana+altermanager

参考博客

- alinode 官方镜像分析并提取 Dockerfile | Web技术试炼地
- hub.docker.com针对docker中的grafana,提供的官方帮助文档

上一篇:Prometheus监控系统(1)安装与配置详细教程


下一篇:Python:简介、变量、字符串、运算符