美文网首页
Prometheus安装以及基础使用

Prometheus安装以及基础使用

作者: helloKeith | 来源:发表于2019-11-19 16:35 被阅读0次

    一、安装

    打开https://prometheus.io/download/

    解压,打开解压文件目录,执行./prometheus

    打开以下网址ip:9090

    下载node_explorter

    解压,打开解压文件目录,执行./node_explorter

    编辑prometheus.yml

    重启prometheus,打开ip:9090

    下载grafana, 图形管理平台

    解压,进入bin目录,执行./grafana-server

    打开ip:3000,进入平台

    设置数据源,新建图表图形模板

    二、工作原理

    Prometheus用于管理数据

    node_explore用于收集产生数据,可以有多个收集不同数据的插件

    grafana用于将数据显示出来

    三、函数用法

    irate(v range-vector)函数, 输入:范围向量,输出:key: value = 度量指标: (last值-last前一个值)/时间戳差值。它是基于最后两个数据点,自动调整单调性, 如:服务实例重启,则计数器重置。

    下面表达式针对范围向量中的每个时间序列数据,返回两个最新数据点过去5分钟的HTTP请求速率。

    irate(http_requests_total{job="api-server"}[5m])

    sum(irate(node_disk_written_bytes_total{instance==""}[1m]))

    sum(irate(node_disk_read_bytes_total{instance==""}[1m]))

    increase函数:该函数配合counter数据类型使用,获取区间向量中的第一个和最后一个样本并返回其增长量。如果除以一定时间就可以获取该时间内的平均增长率increase(node_cpu[2m]) / 120 #主机节点最近两分钟内的平均CPU使用率

    rate()函数:该函数配合counter类型数据使用,取counter在这个时间段中的平均每秒增量。比如监控网络接受字节数的情况,在9:10到9:20期间累计量增加了1000bytes,加入rate([1m])函数后就会使用1000除以60秒,计算出数据大约为16bytes。rate(node_cpu[2m]) #直接计算区间向量在时间窗口内平均增长速率

    sum函数:在实际工作中CPU大多是多核的,而node_cpu会将每个核的数据都单独显示出来,我们其实不会关注每个核的单独情况,而是关心总的CPU情况。使用sum()函数进行求和后可以得出一条总的数据,但sum()是将所有机器的数据都进行了求和,所以还要再使用by (instance)或者by (cluster_name)就可以取出单个服务器或者一组服务器的CPU数据。上面的公式可以进化为:sum( increase(node_cpu[1m]) )

    count函数:该函数用于进行一些模糊判断,比如有100台服务器在监控,想实现当CPU使用率大于80%的机器达到N台就进行报警就可以使用它

    count(count_netstat_wait_connections > 200)

    topk函数:该函数可以从大量数据中取出排行前N的数值,N可以自定义。比如监控了100台服务器的320个CPU,用这个函数就可以查看当前负载较高的那几个,用于报警

    topk(3,count_netstat_wait_connections)  #Gauge类型

    topk(3,,rate(node_network_receive_bytes[20m]))  #Counter类型

    predict_linear函数:对曲线变化速率进行计算,起到一定的预测作用。比如当前这1个小时的磁盘可用率急剧下降,这种情况可能导致磁盘很快被写满,这时可以使用该函数,用当前1小时的数据去预测未来几个小时的状态,实现提前告警

    predict_linear( node_filesystem_free_bytes{mountpoint="/"}[1h],4*3600 ) < 0 #如果未来4小时后磁盘使用率为负数就会报

    四、基础数据获取与分析

    CPU

    CPU使用率

    (1-avg(irate(node_cpu_seconds_total{mode="idle",instance=""}[5m]))) * 100

    监控内存RAM

    总内存大小

    node_memory_MemTotal_bytes{instance=""}

    可用内存

    node_memory_MemAvailable_bytes{instance=""}

    Buffer缓存

    node_memory_Buffers_bytes{instance=""}

    Cached缓存

    node_memory_Cached_bytes{instance=""}  + node_memory_Slab_bytes{instance=""}

    空闲内存

    node_memory_MemFree{instance=""}

    已用内存

    node_memory_MemTotal_bytes{instance=""}-node_memory_MemFree{instance=""}-node_memory_Cached_bytes{instance=""}

    内存使用率

    1-((node_memory_MemFree{instance=""}+node_memory_Buffers_bytes{instance=""}+node_memory_Cached_bytes{instance=""})/ node_memory_MemTotal_bytes{instance=""})*100

    磁盘性能分析(ROM)

    磁盘的 IOPS,也就是在一秒内,磁盘进行多少次 I/O 读写。单位 iops

    sum by (instance) (irate(node_disk_reads_completed_total{instace=""}[1m])) / 60

    sum by (instance) (irate(node_disk_writes_completed_total{instace=""}[1m])) / 60

    sum by (instance) (irate(node_disk_reads_completed_total{instace=""}[1m])) / 60+sum by (instance) (irate(node_disk_writes_completed_total{instace=""}[1m])) / 60

    磁盘的吞吐量,也就是每秒磁盘 I/O 的流量,即磁盘写入加上读出的数据的大小,单位bytes

    sum(irate(node_disk_read_bytes_total{instance=""}[1m]))/60

    sum(irate(node_disk_written_bytes_total{instance=""}[1m]))/60

    sum(irate(node_disk_read_bytes_total{instance=""}[1m]))/60+sum(irate(node_disk_written_bytes_total{instance=""}[1m]))/60

    IO time 每个磁盘分区输入/输出操作花费的秒数

    sum(irate(node_disk_io_time_seconds_total{instance=""}[5m]))/60   #每秒磁盘读写花费的秒数

    total:总计物理内存的大小。

    Free:空闲内存有多少。

    Shared:多个进程共享的内存总额。

    Buffers:表示buffers cache的内存数量,一般对块设备的读写才需要缓冲。

    Cached:表示page cached的内存数量,一般作文件系统的cached,频繁访问的文件都会被    cached。如果cached值较大,就说明cached文件数较多。如果此时IO中的bi比较小,就        说明文件系统效率比较好。

    Slab:slab分配器不仅可以提供动态内存的管理功能,而且可以作为经常分配并释放的内存的缓存。

    MemAvailable: Free + Buffers + Cached - 不可回收的部分。不可回收部分包括:共享内存段,tmpfs,ramfs等。

    网络监控

    发送流量

    sum(irate(node_network_transmit_bytes_total{instance=""}[1m]))

    接收流量

    sum(irate(node_network_receive_bytes_total{instance=""}[1m]))

    五、测试脚本

    test_io.py

    test_memory.py


    相关文章

      网友评论

          本文标题:Prometheus安装以及基础使用

          本文链接:https://www.haomeiwen.com/subject/cczhictx.html