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 == 0Alert相关配置
示例:
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]]
最后更新于