摘要
本文部分内容来源于网络,个人收集整理,请勿传播
配置
Prometheus启动的时候,可以加载运行参数-config.file指定配置文件,默认为prometheus.yml。
在配置文件中我们可以指定
global: 全局配置alerting: 告警配置rule_files: 规则配置scrape_configs: 数据拉取配置remote_write: 远程可写存储remote_read: 远程可读存储
global 全局配置
属于全局的默认配置,它主要包含4个属性,
scrape_interval: 拉取targets的默认时间间隔。scrape_timeout: 拉取一个target的超时时间。evaluation_interval: 执行rules的时间间隔。external_labels: 额外的属性,会添加到拉取的数据并存到数据库中。
1 | global: |
告警配置
通常我们可以使用运行参数-alertmanager.xxx来配置Alertmanager,但是这样不够灵活,没有办法做到动态更新加载,以及动态定义告警属性。
所以alerting配置主要用来解决这个问题,它能够更好的管理Alertmanager, 主要包含2个参数:
alert_relabel_configs: 动态修改alert属性的规则配置。alertmanagers: 用于动态发现Alertmanager的配置。
配置文件结构大概为:
1 | # Alerting specifies settings related to the Alertmanager. |
1 | # Per-target Alertmanager timeout when pushing alerts. |
规则配置
rule_files主要用于配置rules文件,它支持多个文件以及文件目录。
其代码结构定义为:
1 | RuleFiles []string `yaml:"rule_files,omitempty"` |
配置文件结构大致为:
1 | rule_files: |
数据拉取配置
scrape_configs主要用于配置拉取数据节点,每一个拉取配置主要包含以下参数:
job_name:任务名称honor_labels: 用于解决拉取数据标签有冲突,当设置为true, 以拉取数据为准,否则以服务配置为准params:数据拉取访问时带的请求参数scrape_interval: 拉取时间间隔scrape_timeout: 拉取超时时间metrics_path: 拉取节点的metric路径scheme: 拉取数据访问协议sample_limit: 存储的数据标签个数限制,如果超过限制,该数据将被忽略,不入存储;默认值为0,表示没有限制relabel_configs: 拉取数据重置标签配置metric_relabel_configs:metric重置标签配置
ServiceDiscoveryConfig主要用于target发现,大体分为两类,静态配置和动态发现。
所以,一份完整的scrape_configs配置大致为:
1 | # The job name assigned to scraped metrics by default. |
远程可写存储
remote_write主要用于可写远程存储配置,主要包含以下参数:
url: 访问地址remote_timeout: 请求超时时间write_relabel_configs: 标签重置配置, 拉取到的数据,经过重置处理后,发送给远程存储
一份完整的配置大致为:
1 | # The URL of the endpoint to send samples to. |
远程可读存储
remote_read主要用于可读远程存储配置,主要包含以下参数:
url: 访问地址remote_timeout: 请求超时时间
一份完整的配置大致为:
1 | # The URL of the endpoint to query from. |
服务发现
在 Prometheus 的配置中,一个最重要的概念就是数据源target,而数据源的配置主要分为静态配置和动态发现, 大致为以下几类:
static_configs: 静态服务发现dns_sd_configs: DNS 服务发现file_sd_configs: 文件服务发现consul_sd_configs: Consul 服务发现serverset_sd_configs: Serverset 服务发现nerve_sd_configs: Nerve 服务发现marathon_sd_configs: Marathon 服务发现kubernetes_sd_configs: Kubernetes 服务发现gce_sd_configs: GCE 服务发现ec2_sd_configs: EC2 服务发现openstack_sd_configs: OpenStack 服务发现azure_sd_configs: Azure 服务发现triton_sd_configs: Triton 服务发现
它们具体使用以及配置模板,请参考服务发现配置模板。
它们中最重要的,也是使用最广泛的应该是static_configs, 其实那些动态类型都可以看成是某些通用业务使用静态服务封装的结果。
配置样例
Prometheus的配置参数比较多,但是使用较多的是global, rules, scrap_configs, statstic_config, rebel_config等。
1 | # my global config |
启动参数
1 | /usr/local/bin/prometheus \ |
Exporter
在Prometheus中负责数据汇报的程序统一叫做Exporter, 而不同的Exporter负责不同的业务。 它们具有统一命名格式,即xx_exporter, 例如负责主机信息收集的node_exporter。
Prometheus社区已经提供了很多exporter, 详情请参考这里。
Node Exporter 常用查询语句
收集到node_exporter的数据后,我们可以使用PromQL进行一些业务查询和监控,下面是一些比较常见的查询。
注意:以下查询均以单个节点作为例子,如果大家想查看所有节点,将 instance=”xxx” 去掉即可。
CPU 使用率
1 | 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) |
CPU 各 mode 占比率
1 | avg by (instance, mode) (irate(node_cpu_seconds_total{}[5m])) * 100 |
机器平均负载
1 | node_load1{instance="xxx"} # 1分钟负载 |
内存使用率
1 | 100 - ((node_memory_MemFree{instance="xxx"}+node_memory_Cached{instance="xxx"}+node_memory_Buffers{instance="xxx"})/node_memory_MemTotal) * 100 |
磁盘使用率
1 | 100 - node_filesystem_free{instance="xxx",fstype!~"rootfs|selinuxfs|autofs|rpc_pipefs|tmpfs|udev|none|devpts|sysfs|debugfs|fuse.*"} / node_filesystem_size{instance="xxx",fstype!~"rootfs|selinuxfs|autofs|rpc_pipefs|tmpfs|udev|none|devpts|sysfs|debugfs|fuse.*"} * 100 |
网络 IO
1 | # 上行带宽 |
网卡出/入包
1 | # 入包量 |
附录
node_exporter
1 |
|
prometheus
1 |
|