zabbix
运维职责
1.保障企业数据的安全可靠。 2.为客户提供7*24小时服务。 3.不断提升用户的体验。 在关键时刻,提前提醒我们服务器要出问题了。 当出问题之后,可以便于找到问题的根源。
在有监控系统之前,运维人员需要登录服务器手动敲打命令来获取系统数据,例如前面的iotop,glances,htop,free,ps等查看服务器状态的命令。
运维人员通过系统管理的命令来获取服务器数据,为了分析问题,可能会把数据复制到本地机器,通过excel等工具进行制表,画图分析服务器性能动态。
这种手动管理服务器的麻烦在于,服务器出现问题的时候,运维无法即使的发现,可能服务器内存满了,网站应用挂了,用户过来投诉才能发现,那此时老板可能会训斥运维同学一小时以上。。多么可怕。
有了监控软件之后,
作为一个运维,会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态。
利用一个优秀的监控软件,我们可以:
1. 通过一个友好的界面进行浏览整个网站所有的服务器状态
2. 可以在web前端方便的查看监控数据
3. 可以回溯寻找事故发生时系统的问题和报警情况
有了一套完善的监控体系,你就可以悠闲的喝着咖啡干活,而不用提心吊胆。
监控系统是整个运维自动化体系中非常重要的环节,从服务器上架到机房,到最后下架回收,整个过程都应该有监控的存在。
1. 服务器上架的硬件监控,检测线路,服务器接口状态
2. 服务器运行时的监控,系统指标监控,且在出现异常的时候发出报警通知对应的人员
3. 在服务器回收的时候,要取消硬件,软件的监控
并且大型公司还会对监控系统进行开发,确保有API能够方便的和其他部门同事进行协同工作。
互联网公司的运维
一般公司里的运维,大致可以分为基础运维、应用运维、运维开发、监控组四大部分。
1. 基础运维,负责IDC运维,服务器上下架,网络设备等
2. 应用运维,也就是system administrator,系统管理员
3. 运维开发,负责运维工具的开发,系统开发等,例如开发监控系统,代码发布系统
4. 监控组,也就是24小时值班的人员,需要时刻关注服务器,网站的状况,出现问题后,第一时间联系相关运维以及研发人员。
所谓的自动化运维
如上的这些问题,几乎所有的运维同学都会遇见过,那么成长之后的运维,如何解决这些问题?
1. 硬件标准化,包括服务器所有的硬件指标
3. 软件标准化,软件版本,系统环境一致性等
3. 运维自动化,监控体系,代码发布体系,CMDB。
监控体系,部署如zabbix等系统实现:
1. 系统状态监控
2. 应用状态监控
3. 出错时即使告警
发布系统,部署CI/CD运维体系:
1. 代码发布
2. 代码检查
3. 代码回滚,发布
服务器标准化,部署如cobbler+pxe实现自动化装机,ansible实现工程自动化配置,做到硬件,软件的标准化。
CMDB系统,也读作配置管理数据库,存储了所有的运维数据,包括服务器硬件信息,网络设备信息,属于运维的心脏。
监控生命周期
服务器上架机柜
进行基础设施监控
1. 服务器温度,风扇转速(ipmitool命令对服务器进行远程管理,注意只能用在物理机,vmware不行)
2. 存储的容量,性能(df,fdisk,dd,iotop)
3. CPU性能好坏(lscpu,uptime,top,htop,glances)
4. 内存容量(free)
5. 网络情况(iftop,nethogs)
应用监控
1. 数据库mysql,redis
2. nginx
3. php-fpm
4. python
若是服务器在维护中,还得暂停监控指标,否则监控会不停的报警。
监控系统在运维自动化系统中,实现如下功能
1. 监控数据收集,可视化展示,(图表展示,柱状图,曲线图,折线图)
2. 异常数据报警
3. 结合如CMDB等系统协同工作
理想化的运维监控利器
一个完善且理想的监控系统,得有如下特点
1. 监控系统能够自定义监控的内容,自己通过脚本采集所需的数据
2. 数据需要存入到数据库,日后对该数据进行分析计算
3. 监控系统可以简易,快速的部署到服务器
4. 数据可视化直观清晰
异常告警通知:
1. 可以定义复杂度告警逻辑,做到监控项之间的关联告警,例如程序之间的依赖检测,而不是只单独检测某一个指标。
2. 告警可以确认响应,让运维组内的人知道已经有人在处理告警问题了。
3. 报警方式可以自定义,如短信,邮件,以及微信,钉钉等。
4. 告警内容可以自定义,能够写入一些简单的分析,便于运维人员直观了解数据,否则还得去服务器查看
5. 报警后,可以预处理一些任务,如自我修复,重启,采集数据等。
协同工作
1. 监控系统有强大的API,提供给研发同学调用,其他系统调用
2. 监控数据是开放性,数据结构主流,便于解析。
3. 监控可视化可以简易的插件使用,而非复杂的js文件
Zabbix介绍
Zabbix 是由 Alexei Vladishev 开发的一种网络监视、管理系统,基于 Server-Client 架构。可用于监视各种网络服务、服务器和网络机器等状态。
使用各种 Database-end 如 MySQL, PostgreSQL, SQLite, Oracle 或 IBM DB2 储存资料。Server 端基于 C语言、Web 管理端 frontend 则是基于 PHP 所制作的。
Zabbix 可以使用多种方式监视。可以只使用 Simple Check 不需要安装 Client 端,亦可基于 SMTP 或 HTTP ... 各种协议定制监视。
在客户端如 UNIX, Windows 中安装 Zabbix Agent 之后,可监视 CPU Load、网络使用状况、硬盘容量等各种状态。而就算没有安装 Agent 在监视对象中,Zabbix 也可以经由 SNMP、TCP、ICMP、利用 IPMI、SSH、telnet 对目标进行监视。
Zabbbix自带的Item足够满足普通小公司的监控需求,对于大公司也可以设定自定义的Item,自动生成报表,也有API可以和其他系统集成。
zabbix的特点
zabbix就是可以满足理想化的监控系统需求
1. 支持自定义监控脚本,提供需要输出的值即可
2. zabbix存储的数据库表结构稍有复杂但是逻辑清晰
3. zabbix存在模板的概念,可以方便的将一组监控项进行部署
4. zabbix每一个item也就是监控项,都可以看到历史记录,且web界面友好
5. zabbix有强大的Trigger(触发器)定义规则,可以定义复杂的报警逻辑
6. zabbix提供了ack报警确认机制
7. zabbix支持邮件,短信,微信等告警
8. zabbix在触发告警后,可以远程执行系统命令
9. zabbix有原生的PHP绘图模块
zabbix专有词汇
对于英文的掌握,是IT人员必须学习的技能,以下是使用zabbix必须掌握的一些关键词
1. zabbix server,服务端,收集数据,写入数据
2. zabbix agent,部署在被监控的机器上,是一个进程,和zabbix server进行交互,以及负责执行命令
3. Host,服务器的概念,指zabbix监控的实体,服务器,交换机等
4. Hosts,主机组
5. Applications,应用
6. Events,事件
7. Media,发送通知的通道
8. Remote command,远程命令
9. Template,模板
10. Item,对于某一个指标的监控,称之为Items,如某台服务器的内存使用状况,就是一个item监控项
11. Trigger,触发器,定义报警的逻辑,有正常,异常,未知三个状态
12. Action,当Trigger符合设定值后,zabbix指定的动作,如发个邮件给超哥,说服务器有问题了
zabbix程序组件
1. Zabbix_server,服务端守护进程
2. Zabbix_agentd,agent守护进程
3. zabbix_proxy,代理服务器
4. zabbix_database,存储系统,mysql,pgsql
5. Zabbix_web,web GUI图形化界面
6. Zabbix_get,命令行工具,测试向agent发起数据采集请求
7. Zabbix_sender,命令行工具,测试向server发送数据
8. Zabbix_java_gateway,java网关
安装zabbix5.0
5.0 版本对基础环境的要求有大的变化,最大的就是对 php 版本的要求,最低要求 7.2.0 版本,对 php 扩展组件版本也有要求,详见官网文档
https://www.zabbix.com/documentation/current/manual/installation/requirements
准备好一台机器
[root@zabbix-server01 ~]# hostname zabbix-server01 [root@zabbix-server01 ~]# ifconfig ens33 |awk 'NR==2{print $2}' 10.0.1.50 # 关闭防火墙,selinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config systemctl disable --now firewalld reboot [root@zabbix-server01 ~]# free -m total used free shared buff/cache available Mem: 3773 106 3516 11 149 3454 Swap: 2047 0 2047
官方安装文档
https://www.zabbix.com/download?zabbix=5.0&os_distribution=red_hat_enterprise_linux&os_version=7&db=mysql&ws=apache
安装步骤
1.获取zabbix官方源 rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm # 这一步很重要 sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo yum clean all 2.安装zabbix server和agent yum install zabbix-server-mysql zabbix-agent -y 3.安装 Software Collections,便于后续安装高版本的 php,默认 yum 安装的 php 版本为 5.4 过低。 SCL(Software Collections)可以让你在同一个操作系统上安装和使用多个版本的软件,而不会影响整个系统的安装包。 软件包会安装在/opt/rh目录下 为了避免系统广泛冲突,/opt/rh包安装在目录中,例如,这允许你在CentOS 7机器上安装Python 3.5,而不会删除或干扰Python 2.7. /etc/opt/rh/软件包的所有配置文件都存储在目录中相应的目录中,SCL包提供了定义使用所包含应用程序所需的环境变量的shell脚本,例如,PATH,LD_LIBRARY_PATH和MANPATH ,这些脚本存储在文件系统中,作为 /opt/rh/package-name/enable 。 yum install centos-release-scl -y 4.修改zabbix前端源 vim /etc/yum.repos.d/zabbix.repo [zabbix-frontend] name=Zabbix Official Repository frontend - $basearch baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/$basearch/frontend enabled=1 # 修改这里 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591 5.安装zabbix前端环境 yum install zabbix-web-mysql-scl zabbix-apache-conf-scl -y 6.安装zabbix所需的数据库,直接用centos7自带的mariadb yum install mariadb-server -y 7.启动数据库,且配置开机启动 [root@zabbix-server01 opt]# systemctl enable --now mariadb Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service. [root@z 8.初始化mariadb,设置root密码,chaoge666 mysql_secure_installation 9.使用root用户登录mariadb,建立zabbix数据库,这里的编码设置,非常重要,否则zabbix无法安装 create database zabbix character set utf8 collate utf8_bin; create user zabbix@localhost identified by 'chaoge666'; grant all privileges on zabbix.* to zabbix@localhost; flush privileges; quit; 10.使用以下命令导入 zabbix 数据库,zabbix 数据库用户为 zabbix,密码为chaoge666 zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix 11.修改 zabbix server 配置文件/etc/zabbix/zabbix_server.conf 里的数据库密码 [root@zabbix-server01 data]# grep '^DBPassword' /etc/zabbix/zabbix_server.conf DBPassword=chaoge666 12.修改 zabbix 的 php 配置文件 /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf 里的时区 [root@zabbix-server01 data]# grep 'timezone' /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf php_value[date.timezone] = Asia/Shanghai 13.启动相关服务 systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm 14.访问zabbix入口
检查组件是否正常
配置zabbix数据库用户密码
一直下一步直到完成进入首页