Prometheus-介绍及安装

简介

Prometheus是用于事件监控和警告一个免费的软件应用程序。它对监控数据使用HTTP拉取模式,具有灵活的查询和实时报警建成了时间序列数据库的实时指标。

服务组成

Prometheus服务由以下几个组件组成一个完整的服务: Prometheus: 主要用于抓取数据和存储时序数据,另外还提供查询和 Alert Rule 配置管理。 Exporter:用来暴露主机和应用程序的指标,目前有很多可用于各种目的的exporter

  • node_exporter:内部监控,可用于收集各种主机指标数据(包括CPU、内存和磁盘)[[Node_Exporter安装]]

  • blackbox-exporter:探针监控,用于从应用程序的外部探测监控

  • consul_exporter

  • graphite_exporter

  • haproxy_exporter

  • memcached_exporter

  • mysqld_exporter: 对MySQL数据库性能及资源利用率的监控[[MySQL_Exporter]]

  • statsd_exeporter

  • kube-state-metrics: 用于监控K8S集群情况,安装、使用方法见[[kube-state-metrics监控Kubernetes|kube-state-metrics]]

全部Exporter可以查阅官方文档

Alertmanager:处理从客户端发来的警报 ,客户端通常是Prometheus服务器。Alertmanager对警报进行去重、分组,然后路由到不同的接收器

pushgateway:位于发送指标的应用程序和Prometheus服务器之间,Pushgateway接收指标,然后做为目标被抓取,以将指标提供给Prometheus服务器。用于Prometheus服务器无法抓取资源的一种解决方案(安全性或连接性问题,使你无法访问目标资源,例如服务或应用只允许特定端口或路径访问;目标资源的生命周期太短,例如容器的启动、执行和停止;目标资源没有可以抓取的端点,例如批处理作业)

Grafana:一个[[开源]]可视化板工具,用于Prometheus的可视化界面


在Linux上安装Prometheus

系统环境:Cent OS x64 1804 Prometheus版本:v2.26.0

下载Prometheus的tar包

wget https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz

安装

tar -zxf prometheus-2.26.0.linux-amd64.tar.gz
cp prometheus-2.26.0.linux-amd64/prometheus /usr/bin/
cp prometheus-2.26.0.linux-amd64/promtool /usr/bin/
chmod +x /usr/bin/prometheus
chmod +x /usr/bin/promtool

通过 --version参数来检查版本,验证是否安装成功

prometheus --version

配置Prometheus,建议用http://www.yamllint.com/ 等在线yaml验证工具来验证yaml配置格式是否正确。在/etc/prometheus下新建配置文件,文件名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:
      - 172.23.210.22:9093
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
# 规则配置
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"
  - /etc/prometheus/rules/*.rules
  
  
# 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.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['172.23.210.22:9090']
  - job_name: 'node'
    static_configs:
      - targets: ['172.23.210.22:9100']
        labels:
          instance:"172.23.210.22"
  
  # 不想重启Prometheus服务,临时修改、添加节点,可以使用file_sd_configs的方式;
  # Prometheus会定时去指定的目录下读取配置文件,使新增的配置生效。
  - job_name: "MySQL_Node"
	file_sd_configs:
	  - files:
	    - /etc/prometheus/target/mysql/*.yaml
		refresh_inerval: 5m
    relabel_configs:
      - source_labels: [__address__]
        target_label: instance
        regex: '([^:]+):\d+'
        replacement: '${1}'
        action: replace

默认情况下prometheus的instance字段会记录成IP:Port形式,但在很多仪表盘中,会以instance字段做为主机来进行匹配,如果加上端口,会导致匹配不上,可以加上relabel_configs配置进行标签替换

  - job_name: "MySQL_Node"
	file_sd_configs:
	  - files:
	    - /etc/prometheus/target/mysql/*.yaml
		refresh_inerval: 5m
	# 如果是以文件格式记录的Node信息,下面是标签替换内容
    relabel_configs:
      - source_labels: [__address__]
        target_label: instance
        regex: '([^:]+):\d+'
        replacement: '${1}'
        action: replace

  - job_name: 'node'
    static_configs:
      - targets: ['172.23.210.22:9100']
        # 如果是直接写的目标,则直接添加labels和instance进行替换
        labels:
          instance:"172.23.210.22"

mysql.yaml配置示例,Node_exporter也可以用类似的配置

- targets:
  - '172.23.210.21:9104'
  - '172.23.101.19:9104'
  - '172.23.6.92:9104'
  - '172.23.50.22:9104'

启动服务

prometheus --config.file="/etc/prometheus/prometheus.yml"

启动成功就可以访问http://ip:9090看到Prometheus的仪表盘界面

配置为使用systemctl控制服务

cat > /etc/systemd/system/prometheus.service << EOF
[Unit]
Description=prometheus Daemon

[Service]
ExecStart=/usr/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle --storage.tsdb.path=/prometheus/data/ --storage.tsdb.retention.time=10d --storage.tsdb.retention.size=10GB 
User=root
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
EOF
# 启动服务
systemctl start prometheus

--web.enable-lifecycle参数用于热加载Prometheus配置,启动时加上该参数后,可以通过[[curl命令|curl]]命令对修改的配置进行热加载而不用重启服务

curl -X POST http://IP:PORT/-/reload

参数

  • --storage.tsdb.retention.time= , 样本保存多长时间。 设置此标志时,它会覆盖“storage.tsdb.retention”。 如果此标志、“storage.tsdb.retention”和“storage.tsdb.retention.size”均未设置,则保留时间默认为 15d。 支持的单位:y、w、d、h、m、s、ms。 仅与服务器模式一起使用。

  • --storage.tsdb.retention.size= , 可以为块存储的最大字节数。 需要一个单位,支持的单位:B、KB、MB、GB、TB、PB、EB。 例如:“512MB”。 基于 2 的幂,所以 1KB 是 1024B。 仅与服务器模式一起使用。

  • --storage.tsdb.path= , 数据保存路径

prometheus 默认日志会输出到/var/log/messages文件

Node相关配置

Node_exporter示例:

- targets:
   - "172.23.210.23:9100"
   - "172.23.210.21:9100"
   - "172.23.210.24:9100"
   - "172.23.210.22:9100"
   - "172.23.101.20:9100"
   - "172.23.101.19:9100"
   - "172.23.6.92:9100"
   - "172.23.50.22:9100"

MySQL_exporter示例:

- targets:
  - '172.23.210.21:9104'
  - '172.23.101.19:9104'
  - '172.23.6.92:9104'
  - '172.23.50.22:9104'

Alert示例:

- targets:
  - '172.23.210.22:9093'

Docker用的cadvisor进行监控 Docker_exporter示例:

- targets:
  - '172.23.210.21:8080'

Rules相关配置

示例:

groups:
  - name: node_rules
    interval: 10s
    rules:
      - record: instance:node_cpu:avg_rate5m
        expr: 100 - avg (irate(node_cpu_seconds_total{job='Node',mode='idle'}[5m])) by (instance) * 100
      - record: instance:node_memory_usage:percentage
        expr: (node_memory_MemTotal_bytes -(node_memory_Cached_bytes +node_memory_MemFree_bytes + node_memory_Buffers_bytes)) / node_memory_MemTotal_bytes * 100
      - record: instance:node_filesystem_usage:percentage
        expr: (node_filesystem_size_bytes{mountpoint='/'} - node_filesystem_free_bytes{mountpoint='/'}) / node_filesystem_size_bytes{mountpoint='/'} * 100
      - record: instance:nodestatus
        expr: up == 0

Alert相关配置

示例:

groups:
- name: node_alerts
  rules:
  - alert: High Node CPU
    expr: instance:node_cpu:avg_rate5m > 40
    for: 10m
    labels:
      severity: warning
    annotations:
      summary: High Node CPU for 10 minues
      console: "详细情况请查看Grafana控制台"
  - alert: High Memory
    expr: instance:node_memory_usage:percentage > 99
    for: 1h
    labels:
      severity: warning
    annotations:
      summary: "节点内存使用率超过99%且持续1小时以上!"
      console: "详细情况请查看Grafana控制台"
 
  - alert: Node Down
    expr: up == 0
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "节点服务不可用!"
      console: "详细情况请查看Grafana控制台"
  
  - alert: K8S Node Down
    expr: kube_node_status_condition{condition='Ready',status='unknown'} == 1
    for: 1m
    labels:
      severity: error
    annotations:
      summary: "测试环境节点状态为 NotReady!!!"
      console: "详细情况请查看Grafana控制台"
      

通过kubernetes安装Prometheus

[[Prometheus-Ingress.yaml]] [[Prometheus-deployment.yaml]] [[prometheus-alertmanager-deployment.yaml]] [[Prometheus-grafana-deployment.yaml]] [[Prometheus-node-exporter-ds.yaml]]

最后更新于