Prometheus提供两种存储方式,分别为本地存储和远端存储。
本地存储通过Prometheus自带的时序数据库将数据保存在本地,从而实现高性能读写。但是时序数据库毕竟是非集群的数据库,这样就限制了他的存储容量,无法保存大量的历史监控数据,为此,Prometheus引入了远端存储。
安装Exporter
安装了Node Exporter程序,该程序对外暴露了一个用于获取当前监控样本的HTTP访问地址。这样的一个程序称为Exporter,Exporter的实例称为哥Target,Prometheus通过轮询的方式定时从这些Target中获取监控数据样本,并且存储在数据库当中。
下载地址:https://prometheus.io/download/#node_exporter
解压node_exporter二进制文件,并将执行程序放到/usr/local/bin目录下
# tar -xf node_exporter-0.18.1.linux-amd64.tar.gz -C /opt/ # cd /opt/node_exporter-0.18.1.linux-amd64/ # cp node_exporter /usr/local/bin/
查看node_exporter是否正常
# node_exporter --version node_exporter, version 0.18.1 (branch: HEAD, revision: 3db77732e925c08f675d7404a8c46466b2ece83e) build user: root@b50852a1acba build date: 20190604-16:41:18 go version: go1.12.5
可以通过参数来对node_exporter进行配置,使用--help查看完整的参数列表。
# node_exporter --help
配置textfile收集器
textfile收集器非常有用,它允许我们暴露自定义指标。这些自定义指标可能是批处理或cron作业无法抓取的,可能是没有exporter的源,甚至可能是为主机提供上下文的静态指标。
例如,我们创建一个目录来保存指标定义文件。在这个目录中创建一个新的指标。指标以.prom结尾的文件内定义,并且使用Prometheus特定文本格式。
具体可以参考链接:https://prometheus.io/docs/instrumenting/exposition_formats/#text-format-details
# mkdir -p /var/lib/node_exporter/textfile_collector # echo 'metadata{role="docker_server",datacenter="NJ"} 1' | tee /var/lib/node_exporter/textfile_collector/metadata.prom
启用systemd收集器
systemd收集器,它记录systemd中的服务和系统状态。这个收集器收集了很多指标,但我们并不想收集systemd管理的所有内容,而只想收集某些关键服务。为了保持简洁,可以将特定服务列入白名单,只收集如下服务的指标:
# node_exporter --collector.textfile.directory="/var/lib/node_exporter/textfile_collector/" --collector.systemd --collector.systemd.unit-whitelist=“(ssh|grafana-server).service”
过滤收集器
Node Exporter可以返回很多指标,也许你并不想把他们全部收集上来。除了通过本地配置来控制Node Exporter在本地运行哪些收集器之外,Prometheus还提供了一种方式来限制收集器从服务器实际抓取数据,尤其是在你无法控制正抓取的主机的配置时,这种方式非常有帮助。
1.通过本地控制来控制数据指标上报,因为某些参数默认都是启动的,你可以通过使用no-前缀来修改状态。例如,暴露/proc/net/arp统计信息的arp收集器默认是启用的,由参数--collector.arp控制。因此,要禁用此收集器,需要运行如下命令:
# node_exporter --no-collector.arp
2.Prometheus通过添加特定收集器列表来实现作业配置。
scrape_configs: ... -job_name: 'node' static_configs: - targets: ['1.1.1.1','2.2.2.2'] params: collect[]: - cpu - meminfo - diskstats - netdev - filefd - filesystem - xfs - systemd
标签-重新标记
通过重新标记,你可以控制、管理并标准化环境中的指标。一些最常用的用例是:
- 删除不必要的指标
- 从指标中删除敏感或不需要的标签
- 添加、编辑或修改指标的标签值或标签格式
可以通过两个阶段进行重新标记。第一个阶段是对来自服务发现的目标进行重新标记,这对于将来自服务发现的元数据标签中的信息应用于指标上的标签来说非常有用,主要在relabel_configs块中完成。第二个阶段是在抓取之后且指标被保存于存储系统之前。这样,可以确认哪些指标需要保存、哪些需要丢弃以及这些指标的格式。主要在metric_relabel_configs中完成。
删除标签
例如:cAvisor中收集了大量数据,并非所有数据都是有用的,因为,如何在存储数据前删除其中一些指标,避免不必要的空间浪费。
- job_name: 'docker' static_configs: - targets: ['1.1.1.','2.2.2.2','3.3.3.3'] metric_relabel_configs: - source_labels: [_name_] separator: ',' regex: '(container_tasks_state|container_memory_failures_total)' action: drop
多个标签通过分隔符连接在一起,默认分隔符为“;”,也可以使用separator参数覆盖分隔符配置。
这里_name_标签将使用“,”进行分隔。action中drop操作,这将在数据存储之前删除指标。其他操作(如keep)则会保留与正则表达式匹配的指标。并删除所有其他指标。
替换标签值
例如:许多cAdvison指标都有一个id标签,其中包含正在运行的进程的名称。如果将进程id重新定义一个标签,放入container_id中,可以这样做:
metric_relabel_configs: - source_labels: [id] regex: '/docker/([a-z0-9]+);' replacement: '$1' target_label: container_id