监控工具对比、黑盒监控与盒白盒监控、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 架构图
kubernetes监控简介:
容器监控的实现方对比虚拟机或者物理机来说比大的区别
- 比如容器在k8s环境中可以任意横向扩容与缩容,那么就需要监控服务能够自动对新创建的容器进行监控,当容器删除后又能够及时的从监控服务中删除,
- 而传统的zabbix的监控方式需要在每一个容器中安装启动agent,并且在容器自动发现注册及模板关联方面并没有比较好的实现方式。
prometheus.yml静态配置
prometheus数据采集流程:
- 基于静态配置文件 或 动态发现获取目标
- 向目标URL发起http/https请求
- 目标接受请求并返回指标数据
- prometheus server接受并数据并对比告警规则,
- 如果 触发告警则进一步执行告警动作并存储数据
- 不触发告 警则只进行数据存储
- grafana进行数据可视化
TSDB简介:
TSDB简介: 默认情况下,prometheus将采集到的数据存储在 本地的TSDB数据库中,路径默认为prometheus 安装目录的data目录,数据写入过程为先把数据 写入wal日志并放在内存,然后2小时后将内存数 据保存至一个新的block块,同时再把新采集的数 据写入内存并在2小时后再保存至一个新的block 块,以此类推。
prometheus先将采集的指标数据保存到内存的 chunk中,chunk是prometheus存储数据的最基本单元。
每间隔两个小时,将当前内存的多个chunk统一 保存至一个block中并进行数据合并、压缩、并生 成元数据文件index、meta.json和tombstones
安装 prometheus server(二进制方式)
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界面
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端口
如何新增监控节点
step1 新节点安装node_exporter
step2 prometheus节点修改 /apps/prometheus/prometheus.yml 添加新节点
step3 systemctl daemon-reload && systemctl restart prometheus && systemctl enable prometheus.service
step4
http://39.101.77.50:9090/targets?search=
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安装)
# 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/
step3
访问http://39.101.77.50:3000/dashboard/import
输入copy id 然后关联data source