Prometheus-云原生时代的监控利器、Prometheusserver部署、node_exporter部署

216 阅读6分钟

监控工具对比、黑盒监控与盒白盒监控、Kubernetes监控简介;

常见的监控工具:

  • Cacti:基于基于LAMP平台展现的网络流量监测及分析工具,www.cacti.net
  • Nagios:用来监视系统和网络的开源应用软件,利用其众多的插件实现对本机和远端服务的监控,www.nagios.org
  • Open-falcon: 小米公司开源出来的监控软件open-falcon(猎鹰),监控能力和性能较强,www.open-falcon.org (小米这帮人被滴滴挖走了 写了Nightingale 所以Open-falcon很少在维护更新了)
  • Nightingale:夜莺, 由滴滴基于open-falcon二次开发后开源出来的分布式监控系统,n9e.github.io
  • Zabbix:老牌的开源监控软件,可横向扩展、自定义监控项、支持多种监控方式、可监控网络与各种服务等,www.zabbix.com/cn
  • prometheus:CNCF毕业的云原生监控系统,对k8s的容器有良好的兼容性,prometheus.io
  • 商业监控:

Prometheus简介、优缺点对比、组件介绍、数据采集流程、TSDB简介;

prometheus简介

  • Prometheus是基于go语言开发的一套开源的监控、报警和时间序列数据库的组合,
  • 由SoundCloud公司开发的开源监控系统,
  • Prometheus于2016年加入CNCF(Cloud Native Computing Foundation,云原生计算基金会),2018年8月9日prometheus成为CNCF继kubernetes之后毕业的第二个项目,prometheus在容器和微服务领域中得到了广泛的应用

主要优缺点如下:

  • 使用key-value的多维度(多个角度,多个层面,多个方面)格式保存数据
  • 数据不使用MySQL这样的传统数据库,而是使用时序数据库,目前是使用的TSDB
  • 支持第三方dashboard实现更绚丽的图形界面,如grafana(Grafana 2.5.0版本及以上)
  • 组件模块化
  • 不需要依赖存储,数据可以本地保存也可以远程保存
  • 平均每个采样点仅占3.5 bytes,且一个Prometheus server可以处理数百万级别的的metrics指标数据。
  • 支持服务自动化发现(基于consul等方式动态发现被监控的目标服务)
  • 强大的数据查询语句功(PromQL,Prometheus Query Language)
  • 数据可以直接进行算术运算
  • 易于横向伸缩 支持联邦机制
  • 众多官方和第三方的exporter(“数据”导出器)实现不同的指标数据收集

Prometheus 模块介绍:

  • prometheus server
    • 主服务,接受外部http请求,收集、存储与查询数据等。
    • 对外提供API 可以让别人查询数据
  • prometheus targets:
    • 目标机器、容器, 静态收集的目标服务数据。
    • 相对静态的地址可以写到配置文件中
  • service discovery:动态发现服务器、服务
    • 基于API
    • 基于文件
    • 基于consul
  • prometheus alerting
    • 调用 alertmanager组件实现报警通知
  • push gateway
    • 数据收集代理服务器 (类似于zabbix proxy) 短生命周期的收集
    • 类似一个数据中转站
    • 短生命的应用--->push gateway--->prometheus server
  • data visualization and export: 数据可视化与数据导出(访问客户端)。

Prometheus 架构图

image.png

kubernetes监控简介:

容器监控的实现方对比虚拟机或者物理机来说比大的区别

  • 比如容器在k8s环境中可以任意横向扩容与缩容,那么就需要监控服务能够自动对新创建的容器进行监控,当容器删除后又能够及时的从监控服务中删除,
  • 而传统的zabbix的监控方式需要在每一个容器中安装启动agent,并且在容器自动发现注册及模板关联方面并没有比较好的实现方式。

image.png

prometheus.yml静态配置 image.png

prometheus数据采集流程:

  • 基于静态配置文件 或 动态发现获取目标
  • 向目标URL发起http/https请求
  • 目标接受请求并返回指标数据
  • prometheus server接受并数据并对比告警规则,
    • 如果 触发告警则进一步执行告警动作并存储数据
    • 不触发告 警则只进行数据存储
  • grafana进行数据可视化

image.png

TSDB简介:

TSDB简介: 默认情况下,prometheus将采集到的数据存储在 本地的TSDB数据库中,路径默认为prometheus 安装目录的data目录,数据写入过程为先把数据 写入wal日志并放在内存,然后2小时后将内存数 据保存至一个新的block块,同时再把新采集的数 据写入内存并在2小时后再保存至一个新的block 块,以此类推。

prometheus先将采集的指标数据保存到内存的 chunk中,chunk是prometheus存储数据的最基本单元。

每间隔两个小时,将当前内存的多个chunk统一 保存至一个block中并进行数据合并、压缩、并生 成元数据文件index、meta.json和tombstones

image.png

image.png

安装 prometheus server(二进制方式)

下载地址prometheus.io/download/

mkdir /apps; cd  /apps
wget  https://github.com/prometheus/prometheus/releases/download/v2.40.5/prometheus-2.40.5.linux-amd64.tar.gz

[root@hybrid01 apps]# tar -xf prometheus-2.40.5.linux-amd64.tar.gz 

[root@hybrid01 apps]# ln -sv /apps/prometheus-2.40.5.linux-amd64  /apps/prometheus
‘/apps/prometheus’ -> ‘/apps/prometheus-2.40.5.linux-amd64’


#测试工具,用于检测配置prometheus配置文件、检测metrics数据等
[root@hybrid01 prometheus]# ./promtool check config prometheus.yml
Checking prometheus.yml
 SUCCESS: prometheus.yml is valid prometheus config file syntax

# 创建启动service文件:
[root@hybrid01 prometheus]# cat /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target

[Service]
Restart=on-failure
WorkingDirectory=/apps/prometheus/
ExecStart=/apps/prometheus/prometheus --config.file=/apps/prometheus/prometheus.yml --web.enable-lifecycle

[Install]
WantedBy=multi-user.target


systemctl daemon-reload && systemctl restart prometheus && systemctl enable prometheus.service

验证prometheus web界面

访问 http://39.101.77.50:9090

image.png

node_exporter 安装(二进制方式)

下载地址 prometheus.io/docs/instru…

# step1 下载 
mkdir /apps;cd /apps/
wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz

# step2 安装 做软链
tar -xf node_exporter-1.5.0.linux-amd64.tar.gz 

ln -sv /apps/node_exporter-1.5.0.linux-amd64 /apps/node_exporter

# step3 修改配置文件
[root@iZ0jlhtwpysrlkmr5iq8ioZ apps]# cat  /etc/systemd/system/node-exporter.service
[Unit]
Description=Prometheus Node Exporter
After=network.target

[Service]
ExecStart=/apps/node_exporter/node_exporter

[Install]
WantedBy=multi-user.target

# step4 
systemctl daemon-reload
systemctl restart node-exporter
systemctl enable node-exporter.service

# step 5查看服务监听情况
netstat -ntpl|grep 9100

访问9100端口 image.png

如何新增监控节点

step1 新节点安装node_exporter

step2 prometheus节点修改 /apps/prometheus/prometheus.yml 添加新节点 image.png

step3 systemctl daemon-reload && systemctl restart prometheus && systemctl enable prometheus.service

step4 http://39.101.77.50:9090/targets?search= image.png

node节点指标数据收集

node节点常见指标:

  • node_boot_time:系统自启动以后的总结时间
  • node_cpu:系统CPU使用量
  • node_disk*:磁盘IO
  • node_filesystem*:系统文件系统用量
  • node_load1:系统CPU负载
  • node_memeory*:内存使用量
  • node_network*:网络带宽指标
  • node_time:当前系统时间
  • go_*:node exporter中go相关指标
  • process_*:node exporter自身进程相关运行指标

Grafana 安装(yum安装)

参考地址 grafana.com/grafana/dow…

# step1 配置yum源 参考https://mirrors.tuna.tsinghua.edu.cn/help/grafana/

cat /etc/yum.repos.d/grafana.repo

[grafana]
name=grafana
baseurl=https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm
repo_gpgcheck=0
enabled=1
gpgcheck=0

# step2 安装
yum install grafana

# step3 修改 /etc/grafana/grafana.ini
[server]
protocol = http
http_addr = 0.0.0.0
http_port = 3000

# step4
systemctl restart grafana-server && systemctl enable grafana-server

访问 http://39.101.77.50:3000/?orgId=1

配置数据源 http://39.101.77.50:3000/datasources/edit/Pcf9y0KVz

导入新模版

step1 选择模版 找到copy id grafana.com/grafana/das…

step2 访问 http://39.101.77.50:3000/dashboard/ image.png

step3 访问http://39.101.77.50:3000/dashboard/import 输入copy id 然后关联data source image.png