热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:通过Prometheus和Grafana监控Linux进程

本文由编程笔记#小编为大家整理,主要介绍了通过Prometheus和Grafana监控Linux进程相关的知识,希望对你有一定的参考价值。
本文由编程笔记#小编为大家整理,主要介绍了通过Prometheus和Grafana监控Linux进程相关的知识,希望对你有一定的参考价值。





不论你是Linux系统管理员还是DevOps工程师,你都会花很多时间来追踪服务的性能指标。






有时,你可能会遇到运行速度非常慢的实例,但你找不到任何引发问题的线索。有时,你可能往实例发送top或者htop等远程命令却得不到任何响应。有时,你可能遇到一些简单的性能瓶颈,但你却无法用简单快捷的方式识别它。






通过Prometheus和Grafana监控Linux进程




假如我们拥有完整的仪表板可以帮助我们跟踪一般的性能指标以及单个进程,事情会变得怎么样呢?参考:http://grafana.devconnected.com/d/nZMDMoiZk/grafana-top?orgId=1&refresh=5s。




通过Prometheus和Grafana监控Linux进程






本教程的目标是为Linux系统管理员构建一个完整的监控仪表板。








你将学到什么?

通过Prometheus和Grafana监控Linux进程







在正式进入技术之旅之前,让我们快速浏览一下你将要学习的内容:







  • 了解目前Unix系统中监控进程性能最好的方式;


  • 学会怎么安装Prometheus v2.9.2、Pushgateway v0.8.0和Grafana v6.2;


  • 构建一个简单的bash脚本将监控数据暴露给Pushgateway;


  • 构建一个完整的Grafana仪表盘,包括最新的面板,如'Gauge'和'Bar Gauge';


  • 进阶:实现ad-hoc过滤器,用以跟踪单个进程或实例。









现在我们已经对将要学习的所有内容进行了概述,接下来让我们先介绍一下Unix系统目前存在的内容。








Unix进程基础监控

通过Prometheus和Grafana监控Linux进程







对于Unix系统的进程监控,方法有很多。最常用的可能是
'top'命令。






Top命令提供了系统性能指标的一个概览,例如当前的
CPU使用率,当前的
内存使用率,以及每个进程的一些指标。Top命令是系统管理员最经常使用的命令,当发现系统有性能瓶颈时,第一个运行的命令就是它。






通过Prometheus和Grafana监控Linux进程






Top命令可读性已经比较好了,不过还有个命令可读性更好,那就是
htop。Htop提供与top相同的功能集(CPU,内存,运行时间……),但是以更丰富的色彩提供。Htop也提供反应当前系统使用率的
仪表。






通过Prometheus和Grafana监控Linux进程






有了这两个命令,为什么我们还需要构建其他方式来监控进程呢?主要的原因是
系统可用性:如果系统过载,你可能无法对实例进行物理或远程访问。通过外部化进程监控,你可以在不访问机器的情况下分析导致停机的原因。






另一个原因就是进程会频繁地被创建和杀死,通常就是内核自身。这种情况下,运行top命令就太慢了,以至于你获取不到任何信息用来排查系统引发性能问题的原因,然后你将深入到内核日志中进行排查。而通过监控仪表盘,你可以进行简单地回溯,查看引发问题的进程是哪一个。






既然你已经知道我们为什么要构建这个仪表板,那么让我们看一下构建它的整体架构。






通过Prometheus和Grafana监控Linux进程








监控架构

通过Prometheus和Grafana监控Linux进程







在查看我们使用的架构之前,我们希望得到以下解决方案:







  • 资源占用少:不要耗费我们主机太多的资源;


  • 易于实施:一种不需要大量时间来实例化的解决方案;


  • 可扩展:如果我们想监控其他主机,能够快速有效地完成。









这些是我们在本教程中将要牢记的要点。
今天我们将使用的监控架构如下:





通过Prometheus和Grafana监控Linux进程





整体架构有四个不同的组件:







  • 一个bash脚本,用来定期向Pushgateway发送监控数据;


  • Pushgateway:监控数据缓存器,是各个脚本推送数据的目标;


  • Prometheus:实例化一个时序数据库用来存储监控数据,Prometheus将把Pushgateway作为目标,用以检索和存储数据;


  • Grafana一个监控工具仪表盘,使用PromQL从Prometheus中获取数据并可视化展现这些数据。









对Prometheus非常熟悉的人,应该已经知道Prometheus会抓取HTTP实例公开的指标数据并存储它们。






在我们的例子中,bash脚本的生命周期非常短,并且它不会为Prometheus公开任何HTTP实例。这就是我们为什么要使用Pushgateway,它专门为短生命周期任务而设计。Pushgateway会缓存从脚本收集到的监控数据,并将它们暴露给Prometheus。 






通过Prometheus和Grafana监控Linux进程


通过Prometheus和Grafana监控Linux进程








安装不同的工具

通过Prometheus和Grafana监控Linux进程







现在你已经了解了我们的应用程序中发生了什么,接下来让我们安装所需的不同工具。






安装Pushgateway






为了安装
Pushgateway,只需要运行一个简单wget命令获取最新版本的安装包。













  1. wget https://github.com/prometheus/pushgateway/releases/download/v0.8.0/pushgateway-0.8.0.linux-amd64.tar.gz












获取到压缩包后,进行解压并在pushgateway目录下运行可执行文件。













  1. > tar xvzf pushgateway-0.8.0.linux-amd64.tar.gz





  2. > cd pushgateway-0.8.0.linux-amd64/





  3. > ./pushgateway &












运行之后,Pushgateway将以后台进程进行运行。













  1. me@schkn-ubuntu:~/softs/pushgateway/pushgateway-0.8.0.linux-amd64$ ./pushgateway &










  2. [1] 22806





  3. me@schkn-ubuntu:~/softs/pushgateway/pushgateway-0.8.0.linux-amd64$





  4. INFO[0000] Starting pushgateway (version=0.8.0, branch=HEAD, revision=d90bf3239c5ca08d72ccc9e2e2ff3a62b99a122e) source="main.go:65"INFO[0000] Build context (go=go1.11.8, user=root@00855c3ed64f, date=20190413-11:29:19) source="main.go:66"INFO[0000] Listening on :9091. source="main.go:108"












现在,Pushgateway将监听9091端口收集监控数据。






安装Prometheus






在Prometheus官网的'Getting Started'章节,可以在 https://prometheus.io/download/上获取对应你操作系统的安装包,通过wget命令进行下载。













  1. wget https://github.com/prometheus/prometheus/releases/download/v2.9.2/prometheus-2.9.2.linux -amd64.tar.gz












同样,获取到安装包后,解压并切换到Prometheus目录下。













  1. > tar xvzf prometheus-2.9.2.linux-amd64.tar.gz





  2. > cd prometheus-2.9.2.linux-amd64/












如前所述,Prometheus会定期向目标抓取数据,目标(本文中为Pushgateway)需要通过Prometheus的配置文件进行配置。













  1. > vi prometheus.yml












在'global'段,将'scrape_interval'修改为1秒。













  1. global:





  2. scrape_interval: 1s # Set the scrape interval to every 1 second.












在'scrape_configs'段,在'targets'里添加一个条目。













  1. static_configs:





  2. - targets: ['localhost:9090', 'localhost:9091']












退出vi,保存配置后运行Prometheus的可执行文件。验证Prometheus是否正常运行,可以访问地址http://localhost:9090/graph。如果可以进入Prometheus的Web控制台,说明已经正常运行。同样,为了验证Pushgateway是否正常运行,可以在Prometheus web控制台上点击'Status' > 'Targets'。






通过Prometheus和Grafana监控Linux进程






安装Grafana






最后,我们将安装
Grafana v6.2,访问https://grafana.com/grafana/download/beta。






和之前下载方式一样,使用wget命令。













  1. > wget https://dl.grafana.com/oss/release/grafana_6.2.0-beta1_amd64.deb> sudo dpkg -i grafana_6.2.0-beta1_amd64.deb












现在你已经解压了deb包,Grafana在你主机上将作为一个Service进行运行。













  1. > sudo systemctl status grafana-server





  2. grafana-server.service - Grafana instance





  3. Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled)





  4. Active: active (running) since Thu 2019-05-09 10:44:49 UTC; 5 days ago





  5. Docs: http://docs.grafana.org












你可以访问http://localhost:3000来验证Grafana是否正常运行。现在你的主机上已经运行了Grafana,接下来将Prometheus配置为数据源,配置方式如下图:






通过Prometheus和Grafana监控Linux进程






点击'Save and Test'来确保数据源运行正常。






通过Prometheus和Grafana监控Linux进程








构建bash脚本获取监控数据

通过Prometheus和Grafana监控Linux进程







接下来的任务就是构建一个简单bash脚本用来获取监控数据,例如每个进程的CPU使用率和内存使用率。脚本之后可以定义成crontab任务每秒运行一次。






完成任务的方式有很多,你可以每秒运行一次top命令,用sed解析它的输出并把数据发送到Pushgateway。top的问题在于它提供的是随时间推移的平均数据,这并不是我们想要的。取而代之,我们将使用
ps命令,准确地说是
ps aux命令。






通过Prometheus和Grafana监控Linux进程






该命令展示了每个进程的CPU和内存使用率,并将进程运行的命令展示在最后,这是我们想要的数据。






在进行下一步之前,我们先看下Pushgateway期望的输入格式是什么。Pushgateway和Prometheus类似,使用的是
键值对:key对应的是监控指标项,value对应的监控指标值。以下是一些例子:






通过Prometheus和Grafana监控Linux进程






如你所见,第一种方式简单描述的是CPU使用率,而第二种方式描述的是Java进程的CPU使用率。
添加labels可以更加准确地描述你的监控指标项。






有了这些信息后,我们就可以构建最终的脚本了。总结一下,我们的脚本将执行ps aux命令,解析并转换它的输出结果,然后将数据通过上述语法格式发送到Pushgateway。






创建一个脚本文件并添加必要的权限:













  1. > touch better-top





  2. > chmod u+x better-top





  3. > vi better-top












脚本内容如下:













  1. #!/bin/bash





  2. z=$(ps aux)





  3. while read -r z





  4. do





  5. var=$var$(awk '{print "cpu_usage{process=""$11"", pid=""$2""}", $3z}');





  6. done <<< "$z"





  7. curl -X POST -H "Content-Type: text/plain" --data "$var





  8. " http://localhost:9091/metrics/job/top/instance/machine












如果你想使用相同的脚本获取内存使用率,可以简单地把'cpu_usage'标签换成'memory_usage',以及将$3z改成$4z。






所以,上述脚本将做什么呢?首先,它执行ps aux命令;然后,它循环将每行数据转换成打了label的键值对;最终,把所有键值对连在一起通过curl命令发送给Pushgateway。






简单吧?如你所见,脚本收集到我们所有进程的监控数据,但它只运行一次。我们可以简单地通过sleep命令每隔一秒运行它一次。之后,你可以创建一个Service来每秒运行一次(通过Systemd)。













  1. > while sleep 1; do ./better-top; done;












对Systemd感兴趣吗?另一篇教程是关于如何通过Chronograf监控它们,参考:http://devconnected.com/monitoring-systemd-services-in-realtime-with-chronograf/。






现在我们的监控数据发给了Pushgetway,让我们看看Prometheus Web控制台是否能够展现这些数据。访问http://localhost:9090,在'Expression'中输入'
cpu_usage',你将在浏览器中看到所有监控数据。 






通过Prometheus和Grafana监控Linux进程


通过Prometheus和Grafana监控Linux进程








通过Grafana构建最佳仪表盘

通过Prometheus和Grafana监控Linux进程







现在我们的监控数据已经存放在了Prometheus,我们可以通过简单地构建一个
Grafana仪表盘来可视化它们。






我们将使用Grafana v6.2中最新的面板:垂直和水平的条形仪表,圆形仪表和经典折线图。我们将通过4小节分别描述不同仪表的构建,你可以根据自己的兴趣和需求看对应的部分。






通过Prometheus和Grafana监控Linux进程






构建圆形仪表






在我们的面板中,圆形仪表如下所示:






通过Prometheus和Grafana监控Linux进程






现在,我们将聚焦在进程的CPU使用率,配置方式可以简单复用到内存使用率。使用这些面板,我们将追踪两个指标:所有进程的当前CPU使用率以及平均CPU使用率。






为了获取这些数据,我们将在Prometheus实例上执行PromQL查询。什么是PromQL?PromQL是专门为Prometheus设计的查询语言。和在InfluxDB实例中使用InfluxQL(或者IFQL)类似,PromQL查询语句能够使用一些函数聚合数据,例如sum、平均值以及标准差等。PromQL的语法很简单,我们将在面板中进行使用。






获取当前整体CPU使用率






为了获取当前整体CPU使用率,我们将使用
PromQL sum函数。在给定的时刻,总CPU使用率仅仅是个别用法的总和,如下所示:






通过Prometheus和Grafana监控Linux进程






获取平均CPU使用率






对于平均CPU使用率,只需要简单地使用
PromQL avg函数,如下所示:






通过Prometheus和Grafana监控Linux进程






构建水平仪表






水平仪表是在Grafana v6.2中增加的内容。我们使用这个面板的目的是展示系统中资源使用top10的进程。我们将使用
topk 函数来获取指标数据中top k个数据。和之前类似,我们将设置一些阈值来标记那些使用过多资源的进程,如下所示:






通过Prometheus和Grafana监控Linux进程






构建垂直仪表






垂直仪表和水平仪表非常类似,我们只需要在Grafana可视化面板中调整方向参数即可。我们将通过这个面板监控内存使用率,查询语句稍微有点不同,如下所示:






通过Prometheus和Grafana监控Linux进程






构建折线图






折线图在Grafana中已经使用很久了,我们将使用这个面板来构建一个历史视图,观察我们的进程如何随时间进行演变。






以下情况推荐使用折线图:







  • 你过去曾遇到过一些中断问题,并希望调查当时哪些进程处于活跃状态。


  • 某个进程已经死亡,但你希望在事件发生之前了解其行为。









在进行故障排查时,特别需要查看整体全貌(尤其是最近在Grafana Loki中添加的)。配置过程如下所示:






通过Prometheus和Grafana监控Linux进程






至此,我们完成了所有仪表盘的配置。你可以按照你想要的方式来安排它们,或者从我们构造的内容中获得参考。






通过Prometheus和Grafana监控Linux进程








进阶:使用ad hoc过滤器探索数据

通过Prometheus和Grafana监控Linux进程







实时数据很有趣,但当你能够探索数据时,真正的价值就来了。






在进阶部分,我们不会使用'Explore'函数,我们将使用ad hoc过滤器。使用Grafana,你可以定义与图形关联的变量。这些变量有许多不同的选项:例如,你可以为数据源定义一个变量,这样在查询中就可以动态切换数据源。






在我们的示例中,我们将简单使用
ad hoc过滤器来探索数据。






通过Prometheus和Grafana监控Linux进程






点击上图中的按钮,然后点击左侧菜单栏的'
Variables',然后点击'New',如下所示:






通过Prometheus和Grafana监控Linux进程






如上所述,ad hoc过滤器会自动应用于以Prometheus数据源为目标的仪表板。回到我们的仪表板,看一下仪表板的左上角。






通过Prometheus和Grafana监控Linux进程






现在假设你想要获取系统中某个进程的性能数据,以Prometheus自身为例,只需要导航到过滤器并相应地查看仪表板更新。






通过Prometheus和Grafana监控Linux进程






现在你对主机中Prometheus进程的行为有一个直观的了解了。你甚至可以回头看看这个进程的历史行为。






通过Prometheus和Grafana监控Linux进程








总结







通过本教程,现在你对
Prometheus和Grafana提供的内容有了更好的了解。你知道了如何为一个主机构建完整的监控仪表盘,但这只是监控整个Unix实例集群中的一小步。






DevOps监控绝对是一个有趣的主题,但如果你做错了,可能会变成一场噩梦。这正是我们编写这些文章并构建这些仪表板的原因:帮助你拥有这些工具所提供的最高效率。






我们相信通过有用的示例可以增强伟大的技术,你呢?






原文链接:http://devconnected.com/monitoring-linux-processes-using-prometheus-and-grafana/









Kubernetes企业级实战训练营










Kubernetes企业级实战训练营将于2019年8月30日在北京举办,3天时间带你系统掌握Kubernetes,学习效果不好可以继续学习。本次培训包括:Docker基础、容器技术、Docker镜像、数据共享与持久化、Docker三驾马车、Docker实践、Kubernetes基础、Pod基础与进阶、常用对象操作、服务发现、Helm、Kubernetes核心组件原理分析、Kubernetes服务质量保证、调度详解与应用场景、网络、基于Kubernetes的CI/CD、基于Kubernetes的配置管理等,
点击下方图片或者阅读原文链接查看详情。












推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • Linuxchmod目录权限命令图文详解在Linux文件系统模型中,每个文件都有一组9个权限位用来控制谁能够读写和执行该文件的内容。对于目录来说,执行位的作用是控制能否进入或者通过 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 在2022年,随着信息化时代的发展,手机市场上出现了越来越多的机型选择。如何挑选一部适合自己的手机成为了许多人的困扰。本文提供了一些配置及性价比较高的手机推荐,并总结了选择手机时需要考虑的因素,如性能、屏幕素质、拍照水平、充电续航、颜值质感等。不同人的需求不同,因此在预算范围内找到适合自己的手机才是最重要的。通过本文的指南和技巧,希望能够帮助读者节省选购手机的时间。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 本文介绍了在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一,尤其是在大规模系统中,数据库集群已经成为必备的配置之一。文章详细介绍了主从数据库架构的好处和实验环境的搭建方法,包括主数据库的配置文件修改和设置需要同步的数据库等内容。MySQL的主从复制功能在国内外大型网站架构体系中被广泛采用,本文总结了作者在实际的Web项目中的实践经验。 ... [详细]
  • 本文介绍了在Ubuntu系统中清理残余配置文件和无用内容的方法,包括清理残余配置文件、清理下载缓存包、清理不再需要的包、清理无用的语言文件和清理无用的翻译内容。通过这些清理操作可以节省硬盘空间,提高系统的运行效率。 ... [详细]
  • RabbitMq之发布确认高级部分1.为什么会需要发布确认高级部分?在生产环境中由于一些不明原因,导致rabbitmq重启,在RabbitMQ重启期间生产者消息投递失败,导致消息丢 ... [详细]
  • zookeeper集群查看状态时报错Error contacting service. It is
    最近在搭建mq集群时候需要用到,zookeeper,可是启动的时候显示成功了,查看状态的时候却报错了:碰到这个问题也是研究好好半天才解决,这里就总结出 ... [详细]
author-avatar
whiston潘_931
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有