Prometheus之监控节点
最近闲暇之余,或者java学累了,就会看看别的视频,最近学的Prometheus中,发现他讲的和我看的书内容基本一模一样《Prometheus监控实战》,视频也是个人出的,讲的实战一般般,有兴趣的人可以看看这本书,还有一本源码我也买了,还没有开始看。
监控节点
Prometheus使用exporter工具来暴露主机和应用程序上的指标,目前有很多可用于各种目的的exporter。现在我们将专注于一个特定的exporter:NodeExporter。它是用Go语言编写的,提供了一个可用于收集各种主机指标数据(包括CPU、内存和磁盘)的库。它还有一个textfile收集器,允许你导出静态指标,我们很快就会看到这对发送有关节点的信息很有帮助,此外它还可以从批处理作业导出指标。注意 我们有时会使用术语“节点”来指代主机。首先选择其中一台Linux主机,然后下载并安装Node Exporter。我们将选择一个Docker守护进程主机。提示 如果你不想使用exporter,那么还有很多支持Prometheus的主机监控客户端。例如,collectd也可以收集Prometheus指标。
安装Node Exporter
你可以通过tar包来安装Node Exporter,在部分操作系统上也可以通过软件包进行安装。可以从Prometheus官网下载Node Exporter的tar包。下载并解压缩Node Exporter,然后将二进制文件移动到环境变量path包含的路径中。
wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
tar -zvxf node_exporter-0.18.1.linux-amd64.tar.gz
mv node_exporter-0.18.1.linux-amd64 node_exporter
cd node_exporter
cp node_exporter /usr/local/bin/
node_exporter --version
配置textfile收集器
我们还想配置一个特定的收集器,即textfile收集器,本章后面将使用它。textfile收集器非常有用,因为它允许我们暴露自定义指标。这些自定义指标可能是批处理或cron作业等无法抓取的,可能是没有exporter的源,甚至可能是为主机提供上下文的静态指标。收集器通过扫描指定目录中的文件,提取所有格式为Prometheus指标的字符串,然后暴露它们以便抓取。现在让我们设置收集器,首先创建一个目录来保存指标定义文件。
可以看到它包含一个指标名称(metadata)和两个标签。一个标签role定义节点的角色。在示例中,标签的值为docker_server。另一个标签datacenter定义主机的地理位置。最后,指标的值为1,因为它不是计数型、测量型或计时型的指标,而是提供上下文。让我们将这个指标添加到textfile_collector目录下的metadata.prom文件中
mkdir -p /var/lib/node_exporter/textfile_collector
echo 'metadata{role="docker_server",datacenter="NJ"} 1' | sudo tee /var/lib/node_exporter/textfile_collector/metadata.prom
在这里,我们将指标传递到名为metadata.prom的文件中。提示 在真实环境中,建议使用配置管理工具来编辑该文件。例如,在配置新主机时,可以从模板创建元数据指标,这可以让你自动对主机和服务进行分类。要启用textfile收集器,我们不需要配置参数,它默认就会被加载。但我们需要指定textfile_exporter目录,以便Node Exporter知道在哪里可以找到自定义指标。为此,我们需要指定--collector.textfile.directory参数。
运行节点导出器
注:我这里只收集常见的3个服务。它们是Docker守护进程、SSH守护进程和RSyslog守护进程。使用--collector.systemd.unit-whitelist参数进行配置,它会匹配systemd的正则表达式。
nohup node_exporter --collector.textfile.directory /var/lib/node_exporter/textfile_collector --collector.systemd --collector.systemd.unit-whitelist="(docker|sshd|rsyslog).service" &>/dev/null &
过滤收集器
Node Exporter可以返回很多指标,也许你并不想把它们全部收集上来。除了通过本地配置来控制Node Exporter在本地运行哪些收集器之外,Prometheus还提供了一种方式来限制收集器从服务器端实际抓取的数据,尤其是在你无法控制正抓取的主机的配置时,这种方式非常有帮助。Prometheus通过添加特定收集器列表来实现作业配置。
这里,我们将被抓取的指标限制在上面的收集器列表中,使用params块中的collect[]列表指定,然后将它们作为URL参数传递给抓取请求。你可以使用NodeExporter实例上的curl命令来对此进行测试。
在 prometheus 服务器配置 scrap
监控Docker容器
Prometheus提供了几种方法来监控Docker,包括一些自定义exporter。然而,这些exporter一般都不会用到,推荐的方法是使用Google的cAdvisor工具。在Docker守护进程上,cAdvisor作为Docker容器运行,单个cAdvisor容器返回针对Docker守护进程和所有正在运行的容器的指标。Prometheus支持通过它导出指标,并将数据传输到其他各种存储系统,如InfluxDB、Elasticsearch和Kafka。注意 我们假设你已经安装并运行了Docker守护进程,并且了解Docker的基础知识。
运行cAdvisor
由于cAdvisor只是Docker主机上的另一个容器,因此我们可以使用docker run命令启动它。让我们在Docker1主机上运行一个cAdvisor容器。
提示 ro表示只读。第二种类型是可读写的,是Docker套接字的挂载,通常位于/var/run目录中。我们还将容器内部的8080端口映射到主机上的8080端口,你可以用任何适合的端口来覆盖它。我们使用参数--detach以守护进程方式运行容器,并将容器命名为cadvisor。最后,我们使用带有latest标签的google/cadvisor图像。如果运行docker ps命令,刚可以看到正在运行的cAdvisor容器。
抓取cAdvisor
我们需要告诉Prometheus cAdvisor是在Docker守护进程上运行的。为此,我们将在配置中添加第三个作业。让我们在Prometheus服务器上编辑prometheus.yml。我们将再次使用static_configs添加单个目标,而不是使用任何类型的服务发现。
可以看到我们添加了名为docker的新作业,它包含一个static_configs块,并且通过IP地址加端口8080的方式添加了三个Docker主机的列表。我们依然使用默认路径/metrics。如果再次使用SIGHUP或重新启动Prometheus服务器,那么我们的配置将被重新加载,它将开始抓取,然后新的时间序列数据将会出现。但比较重要的是,在我们继续之前,需要首先了解抓取的工作原理以及标签的生命周期。我们将使用cAdvisor指标来探索这个生命周期。