我安装了 Prometheus 和 Grafana,但我应该如何生成图表呢?
首先
在 Prometheus 上收集这些指标,在 Grafana 上指定这些查询,就可以展示成这样。这是给那些刚开始准备环境但想要快速展示类似图表的人的介绍。我会详细解释如何创建一个能显示服务器状态的仪表板。
注释
-
- 環境前提にとりま以下入ってること
(今回はubuntu on EC2 1つにごちゃ入れした)
prometheus 1.8.2(2.0でないが同様かと)
First steps
Getting started
grafana 4.6.2、prometheusをdata source登録済み
Installing Grafana
Creating a Prometheus data source
node_exporter 0.15.1
(↑のFirst stepsに手順あり)
我可以看到服务器的各种状态。
如果做好了「notes」的准备,只需要按下面的步骤就能很快完成。
作为仪表板的一个示例,我认为使用Grafana Lab来查找prometheus的仪表板是一个很好的选择。它有屏幕截图,容易形象化,并且当有相似的监控目标时,基本上可以直接使用。
还可以通过Grafana插件来增加数据源和面板等。
因此在此地,由于Prometheus正运行在服务器上,并且同样在运行node_exporter,所以
-
- 在Labs的Prometheus系统中拷贝ID到剪贴板。
-
- 通过浏览器打开自己的Grafana。
-
- 进行管理员登录。
-
- 点击左上方菜单-> 仪表盘 -> 导入。
-
- 将ID粘贴到Grafana.com仪表盘 -> 加载。
-
- 在选项中选择自己添加的Prometheus数据源。
- 点击导入,即可完成以上操作。
参考:导入一个仪表盘
你是怎么动的?
为了理解其内部情况,我们将关注Memory Distribution图表。
在仪表板上点击图表标题->选择View,可以单独放大该图表,并且通过选择Edit可以显示以下Prometheus查询。
这个图表使用四个查询生成了一个图表。
当我们关注B行的node_memory_MemFree指标时,在prometheus上,
在Prometheus上,存储了一个元素(指标名称+标签)对应的数值信息。
在Prometheus的界面上,主机名和作业名会被赋予标签,但这是由Prometheus自身赋予的,而不是由exporter赋予的。
如果目前只监控一个名为node_exporter的节点,但如果要监控多个EC2等,则可以使用相同的度量名称,但具有不同标签的主机名称等多个度量。这样一来,在Grafana上的查询将变为node_memory_MemFree{$tag=”$host”}。$tag=”$host”是Grafana的模板化功能,它将自动为服务器数量的增加生成相应的查询语句,因此即使监控对象增加,仪表板本身也不需要进行编辑。
同样,可以通过curl命令实际检查node_exporter端的原始响应。
$ curl localhost:9100/metrics
...
# HELP node_memory_MemFree Memory information field MemFree. (← metrics説明分)
# TYPE node_memory_MemFree gauge (← metrics type)
node_memory_MemFree 5.35724032e+08 (← metrics名と現在値)
...
只返回了node_exporter在请求时的mem free值。
“metrics type” 是指 Counter 和 Gauge 等,通過閱讀官方說明可以很容易理解。
簡單來說,如果需要直接將當前值(例如 mem free)賦值給該指標,可以使用 Gauge;如果需要在一定時間內獲取單位時間內的請求次數等並將其加總到先前的值中,則可以使用 Counter。這取決於指標的計量方式。
另外,对于具有多个标签的metrics,请注意先前curl命令的结果中的文件系统剩余空间。
# HELP node_filesystem_files_free Filesystem total free file nodes.
# TYPE node_filesystem_files_free gauge
node_filesystem_files_free{device="/dev/xvda1",fstype="ext4",mountpoint="/"} 809613
node_filesystem_files_free{device="lxcfs",fstype="fuse.lxcfs",mountpoint="/var/lib/lxcfs"} 0
node_filesystem_files_free{device="tmpfs",fstype="tmpfs",mountpoint="/run"} 255383
node_filesystem_files_free{device="tmpfs",fstype="tmpfs",mountpoint="/run/lock"} 255852
node_filesystem_files_free{device="tmpfs",fstype="tmpfs",mountpoint="/run/user/1000"} 255851
在中国大陆,类似这样{}被用于界定设备、挂载点或其他标签的记载。
如果仅在Grafana上指定“node_filesystem_files_free”查询,那么会匹配到5个指标,这些指标会被展开为5条线,生成一个显示这些指标的图表。
尝试添加文件系统空闲的图表
在空闲的仪表盘底部右下方尝试添加文件系统空闲面板。
如果服务器增加,如何自动增加仪表板?
根据前面所述,仪表板已经准备好具备模板功能。
-
- 已在新增的服务器上安装了node_exporter
- prometheus以新增的服务器的IP:port作为目标进行获取。
这个项目需要进一步进行。
第一个是在厨师或配置阶段自动安装好的好感觉,第二个是尝试使用Prometheus的EC2服务发现- 技术笔记或遗忘记录+在AWS上附上特定的标签,如果服务器创建成功,则可以自动创建此监控仪表板(在左上角的Host中选择)。(即使手动编写prometheus.yml文件的targes包含IP:port列表也会增加)
在最后
考虑到周围经常听到”那么,如何使用呢?”这样的问题,因此我决定写一篇介绍性的文章。实际上,本文主要介绍如何在Grafana中创建图表…
有关自定义导出器的讨论在后面也有,但是要从Grafana上如何发送查询才对是很难的,直到熟悉为止。为此,建议您观察各种示例,了解查询函数的使用方法等等,所以我推荐您尝试添加前面提到的Grafana Labs仪表盘示例,并检查其内容。
额外的诗歌:在Prometheus中的监视设计
由于我拿起了笔,顺便写一下,作为一个流程,
-
- 你想要如何接收通知?或者你想在仪表盘上确认情况吗?
-
- 在Prometheus上应储存哪些指标?
-
- 如何从exporter监控特定对象?
- 如何实现Prometheus警报规则或者通过Grafana查询?
制約とは、特定の要件や制限を満たすために注意を払うことです。カスタムエクスポーターを作成する際に、一般的に考慮する制約は以下の通りです:
-
- metrics設計
時系列DBとして時間vs.数値に落とし込めるか?
連続しているか?
監視対象の可変箇所をlabelでうまく表現できるか?
(sd観点でアラート/グラフ設定を自動で対象増えたら増えるor簡単に変更できるか?)
監視先の叩き方
exporterからアクセスする口はあるか?(NWやapi仕様など)
どのくらいこまめに監視先を叩いて大丈夫か?
我认为这个区域可能会有一些问题。
首先,也有人建议阅读官方的写作指导。
我认为在Prometheus中,由于其特别丰富的查询功能,应该尽可能选择简单直接的值作为指标,并在稍后进行处理。
同时,在中间件监控方面,如何使用现有的exporter成了一个重要的话题(而不是自己创建exporter),因此很少会考虑自定义的exporter。
然而,一旦您熟悉了创建自己的出口商,您不仅可以根据通用系统结构,还可以扩展到监控公司专有服务。实际上,只需花费一些精力编写批处理脚本来执行小规模的网络爬虫,一旦创建完成,就可以反复使用。例如,如果使用Python,像client_python这样的库已经为某些语言做好了准备。
在创建服务的谜管理界面等时,需要准备监视并进行调用的API等。如果以微服务的方式作为服务,则认为将prometheus/alertmaanger/各exporter/grafana组合在一起是相容性较好的选择。
总之,与之前提到的「总结」部分相似,从Grafana Lab的仪表板示例中寻找和了解如何查询是一个不错的方法。复写现有的出口程序代码似乎能加深理解。
以上。