Prometheus与Grafana

Prometheus

Prometheus 安装与配置

Prometheus为go语言开发的程序,运行时直接运行二进制即可。

  • 下载二进制包
    官方下载地址 下载最新的二进制程序包.

  • 解压

    1
    2
    tar zxvf prometheus-2.51.1.linux-amd64.tar.gz ; mv prometheus-2.51.1 prometheus ; 
    cd prometheus ;
  • 修改配置文件,定期从8088端口获取/metrics数据

    1
    vim prometheus.yml
  • 增加以下star.sh和stop.sh脚本来启停Prometheus

start.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
cd `dirname $0`

# 是否显示执行过程
#set -x

cur_path=`pwd`
file="${cur_path}/prometheus"
if [ -f ${file} ]
then
nohup ${file} & >/dev/null
echo "start ${file}"
fi

stop.sh

1
2
3
4
5
6
7
8
#!/bin/bash
cd `dirname $0`

# 是否显示执行过程
#set -x

killall prometheus

  • 调用start.sh启动服务

默认prometheus将在9000端口启动web服务,默认用户名和密码都为admin

1
http://127.0.0.1:9090

重要概念解释

指标(Metrics)

指标是监控系统中记录的数据的基本单位。它代表了一种度量,通常表示了系统中某个特定方面的状态或性能指标。每个指标都有一个唯一的名称,并且可以随时间变化。

例如,CPU使用率、内存使用量、请求次数等都可以作为指标。

标签(Labels)

标签是用于标识和区分同一指标下不同维度的数据的键值对。它可以为指标提供更多的上下文信息,使得指标的数据更加丰富和有用。标签通常用于描述指标的特定属性或者维度,如主机名、数据中心、服务名称等。一个指标可以有零个或多个标签。

例如,对于一个请求计数器指标,可以使用标签来表示不同的请求路径、HTTP方法、状态码等。
总的来说,指标描述了被监控的量,而标签则为这些量提供了更详细的描述和区分。指标和标签的结合使得监控系统能够更好地理解和分析系统的状态和性能。

Granafa 安装

Granafa docker安装

1
docker run -d -p 3000:3000 grafana/grafana

Granafa 配置

Granafa 使用

变量的配置与使用

配置变量将在grafana的顶部显示一个变量的选择框,便于图形条件的过滤筛选。每建立一个将在顶部显示一个过滤条件。

变量创建

  • 点击dashboard中的设置按钮

  • 选择”变量”标签页,然后点击”New variable”创建新的变量

  • 根据需求修改变量内容

上图标号一般为必须填写的内容。按标号解释如下

标号 解释
1 变量类型,Query 代表查询数据
2 变量名,用于panel中数据选择语句使用
3 标签名,即在列表选择时,列表前面显示的名字
4 在Dashboard中显示的内容,是否显示标签和内容,根据实际需要选择
5 数据来源,根据实际需要选择,因为我的数据来源于Prometheus,所以如图显示
6 查询类型,即列表内显示的内容是变量的名还是其他
7 所有指标中的某个特定指标(metrics)标签
8 要使用的metrics指标组
9 排序类型
10 刷新方式
11 列表选择模式,是否允许多选,是否显示全部
12 创建变量

下图中的符号代表变量还未被使用

  • 点击上图右上角的”Save Dashboard”保存变量

  • 配置成功后页面最终显示如下

变量使用

  • 编辑pannel,如下图

  • 使用变量对查询条件进行过滤
    如下图:

    注意在标签步骤3中使用 =~ 代表选择数据时使用正则表达式方式进行匹配

上图中如果标记5选择code模式则可以直接用文本方式编写标记6相关的 PromQL 语法语句

1
increase(dn_city_isp_eq_counter{domain=~"$doh_domain", continent=~"$doh_continent", country=~"$doh_country", isp=~"$doh_isp", province=~"$doh_province", eq=~"$doh_eq"}[1m])

计算doh_recursion_total中eq选择项占所有前缀相同的记录的比例

1
2
3
4
5
6
7
sum by (domain) (
rate(doh_recursion_total{domain=~"$doh_domain", continent=~"$doh_continent", country=~"$doh_country", isp=~"$doh_isp", province=~"$doh_province", eq=~"$doh_eq"}[1m])
)
/
sum by (domain) (
rate(doh_recursion_total{domain=~"$doh_domain", continent=~"$doh_continent", country=~"$doh_country", isp=~"$doh_isp", province=~"$doh_province"}[1m])
)

其中sum by 为promql语法的按指定内容分组,

参考

https://yunlzheng.gitbook.io/prometheus-book
https://www.jianshu.com/p/fe8bab704716
https://blog.csdn.net/zhuchunyan_aijia/article/details/118151299
https://www.cnblogs.com/gered/p/13994423.html#_label3
https://juejin.cn/post/7162088398784725022


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!