1.Zabbix
1.1 Zabbix监控获取数据的方式
zabbix-agent 适用于服务器,主机监控
SNMP协议 适用于网络设备(交换机、路由器、防火墙)
IPMI协议 适用于监控硬件设备信息(温度、序列号)
JMX协议 适用于Java应用监控
1.2 Zabbix server部署
添加epel源、添加Zabbix镜像仓库、下载数据库
在数据库创建Zabbix需要的表、授权用户
编辑zabbix server 配置文件,指定数据库连接
1.3 Zabbix-agent监控的三种方式
链接模板
利用自带的key监控数据
自定义key监控数据
1.3.1 常用的key
监控网卡流量
net.if.in[if,]
⇒ net.if.in[eth0,errors]
⇒ net.if.in[eth0]
监控TCP服务状态
net.tcp.listen[port]
⇒ net.tcp.listen[80]
监控UDP服务状态
net.udp.listen[port]
=> net.udp.listen[123]
进程数量
proc.num[,]
⇒ proc.num[]
⇒ proc.num[redis_server,]
⇒ proc.num[nginx,www]
=> proc.num[,zomb]
进程所消耗的内存
proc.mem[,]
=> proc.mem[httpd]
进程所消耗的CPU使用率
proc.cpu.util[,]
=> proc.cpu.util[httpd]
磁盘空间
vfs.fs.size[fs,]
=> vfs.fs.size[/webdata, free]
内存大小
vm.memory.size[]
=> vm.memory.size[free]
文件内容变化
vfs.file.cksum[file]
⇒ vfs.file.cksum[/etc/passwd]
1.3.2 自定义key监控
在被监控端, 注意:命令、脚本只能返回一个结果
UnsafeUserParameters=1
UserParameter=,
1.4 zabbix分布式监控
被监控主机数量过多时,通过zabbix proxy代理来缓解server的压力负载
监控远程位置,解决跨机房
监控主机多,性能跟不上,延迟大
解决网络不稳定
1.4.1 zabbix proxy部署
创建Proxy需要的库,导入表
编辑zabbix proxy配置文件、指定数据库连接
2.Zabbix相关问题
Zabbix监控的优缺点有哪些
优点:开源、无软件成本、server端对设备性能要求低、支持的设备多,自带多种监控模板、能实现自动化监控、开放式接口,扩展性强。
缺点:需在被监控主机上安装agent, 所有数据都存在数据库里,产生的数据量很大,瓶颈主要在数据库。
Zabbix分布式监控有什么优点?
缓解服务器压力,提高可用性和灵活性,减少网络负载,提高监控系统的性能和效率,更好的处理大量的监控数据。
zabbix的分布式监控有什么作用?
部署Proxy是可选的,,但是可能非常有益于分散单个Zabbix sever的负载。 如果只有proxy收集数据,sever上的进程就会减少CPU消耗和磁盘I / O负载。
3.Prometheus
- Prometheus Server
Prometheus 生态最重要的组件,主要用于抓取和存储时间 序列数据,同时提供数据的查询和告警策略的配置管理。
- Alertmanager
Prometheus 生态用于告警的组件,Prometheus Server 会将告警发送给 Alertmanager,Alertmanager 根据路由配置,将告警信息发送给指定的人或组。Alertmanager 支持邮件、Webhook、微信、钉钉、短信等媒介进行告警通知 - Grafana
用于展示数据,便于数据的查询和观测。
- Push Gateway
Prometheus 本身是通过 Pull 的方式拉取数据,但是有些监控数 据可能是短期的,如果没有采集数据可能会出现丢失。Push Gateway 可以用来 解决此类问题,它可以用来接收数据,也就是客户端可以通过 Push 的方式将数据推送到 Push Gateway,之后 Prometheus 可以通过 Pull 拉取该数据。
- Exporter
主要用来采集监控数据,比如主机的监控数据可以通过 node_exporter 采集,MySQL 的监控数据可以通过 mysql_exporter 采集,之后 Exporter 暴露一 个接口,比如/metrics,Prometheus 可以通过该接口采集到数据
- PromQL
PromQL 其实不算 Prometheus 的组件,它是用来查询数据的一种语法,比如查询数据库的数据,可以通过SQL语句,查询Loki的数据,可以通过LogQL,查询 Prometheus 数据的叫做 PromQL
- Service Discovery
用来发现监控目标的自动发现,常用的有基于 Kubernetes、 Consul、Eureka、文件的自动发现等。
4.Prometheus相关问题
1. Prometheus 是什么?它有哪些主要功能?
Prometheus 是一个开源的系统和服务监控工具集,用于收集、存储和查询各种指标数据。它具有强大的数据模型、灵活的查询语言(PromQL)、不依赖分布式存储并且通过拉模式(Pull)和推模式(Push)收集时间序列数据。
2. Prometheus 的工作流程是怎样的?
Prometheus 通过定时拉取(Pull)或服务推送(Push)的方式,从被监控的目标(如服务器、服务等)收集指标数据,然后将这些数据存储在本地的时序数据库中,用户可以通过 Prometheus 的 Web UI 或 API 进行数据查询和可视化。
3. Prometheus 的组件有哪些?
主要组件包括 Prometheus 服务器、Alertmanager、Exporters、Pushgateway 等。
4. Prometheus 的监控数据是如何采集的?
Prometheus 主要通过拉模式(Pull)来采集监控数据,它也可以通过 Pushgateway 来接收服务推送的监控数据。
5. Prometheus 的查询语言 PromQL 是什么?
PromQL(Prometheus Query Language)是 Prometheus 使用的一种强大的查询语言,用于查询和聚合时间序列数据。
6. Prometheus 有哪些高可用方案?
高可用方案包括使用 Prometheus-operator 进行集群管理,以及设置多个 Prometheus 实例进行数据复制等。
7. Prometheus 是如何处理告警的?
Prometheus 通过 Alertmanager 组件来处理告警,它可以对 Prometheus 的告警规则进行管理和路由,支持多种通知方式。
8. Prometheus 的局限是什么?
例如,Prometheus 不支持多维数据模型,它的数据保留策略相对固定,且在处理高基数的监控数据时可能会遇到性能问题。
9. Prometheus 如何监控 Kubernetes 集群?
通过使用特定的 Exporters 如 kube-state-metrics 和 node-exporter,以及集成 Prometheus-operator 来实现对 Kubernetes 集群的监控。10. Prometheus 的容量规划是如何进行的? -
5.Zabbix和Prometheus的区别
1、Zabbix基于C语言开发,它可以用于服务器、操作系统、网络、应用程序等目标对象监控。在监控和数据收集的方式上,可支持zabbix agent、SNMP、ping、端口监控等多种方式。
agent用于部署在目标机器上,并提供数据指标给到server,它们之间基于TCP协议进行通信。
agent支持被动轮询与主动推送模式,被动模式下由server定时向agent端发起请求,agent会处理请求并将值返回给到server端。而在主动推送下,则是由agent定时向server端发送结果。
Zabbix使用外部数据库来存储数据,目前支持的数据库有MySQL、PostgreSQL、Oracle等。在存储的数据类型上,Zabbix除key-value格式外,还支持文本、日志等格式。
zabbix在查询方面功能较弱,只能通过Web界面做一些有限度的操作,或者直接到数据库使用SQL进行查询。
与可视化情况一样,Zabbix内置了告警功能,并支持多种介质的发送。Zabbix 警报系统允许以不同的方式管理事件:发送消息、执行远程命令、根据服务级别升级问题等。
更适用于传统业务架构的物理机、虚拟机环境的监控,对容器的支持比较差;数据存储主要采用的是关系型数据库,会随着被监控节点数量的增加,关系型数据库的压力也会变大,监控数据的读写也会变慢;对大规模集群监控的性能比Prometheus要弱一些,可适用于单集群不超过2000台节点的场景。
2、Prometheus基于Go语言,只专注于监控的功能并提供简单Web界面供用户查询;
基于客户端进行数据的收集,Server端会定时与客户端进行交互,并通过pull方式获取相关的监控指标。
基于HTTP进行通信,这使得与其他工具的集成变得简单,任何组件只要提供对应的HTTP接口就可以接入监控。
Prometheus将数据存储在内置的时间序列数据库(TSDB)中,该数据库相比关系型数据库可以较大的节省存储空间,并且拥有更高的处理效率,能够快速搜索出复杂的结果。
Prometheus在查询方面要比Zabbix强大得多。Prometheus提供了自带的查询语言PromQL,该语言非常灵活、简洁且功能强大,可以与函数和运算符配合,进行计算、过滤、分组等操作,同时支持正则表达式。
在告警上,Prometehus需要与Alertmanager结合使用。因为Prometheus的告警分为两部分,在Prometheus Server端定义告警规则,当触发规则时则会发送到Alertmanager,并由其发送给对应的接收人。
能支持云环境、K8S容器集群的监控,是目前容器监控最好的解决方案;数据存储采用的是时序数据库,大大的节省存储空间,还能提升查询效率;单集群能支持的节点规模更大,通常超过2000台节点、业务服务数量大于1000个的时候建议直接上Prometheus。