1、Linux监控平台介绍
- 监控存在的原因:站点出了问题,没有人知道,等用户发现了,才提醒供应商;对公司影响很大
- 常见的开源监控软件有:cacti、nagios、zabbix、smokeping、open-falcon等
- cacti、smokeping偏向于基础监控,成图非常漂亮,适合监控网络设备
- cacti、nagios、zabbix服务端监控中心,需要php环境支持(用Apache的php,用nginx的php都可以),其中zabbix和cacti都需要mysql作为数据存储,nagios不用存储历史数据,注重服务或者监控项的状态,zabbix会获取服务或者监控项目的数据,会把数据记录到数据库里,从而可以成图
- pen-falcon为小米公司开发,开源后受到诸多大公司和运维工程师的追捧,适合大企业,滴滴、360、新浪微博、京东等大公司在使用这款监控软件,值得研究;open-falcon软件适合大企业使用,小企业可以去研究它的思想
- 因为zabbix配置简单,优势明显,早起使用nagios的企业,慢慢的转向使用zabbix;
- nagios,需要更改配置文件,并不支持web界面一键执行,nagios和zabbix相比:
- nagios 更注重的是某一个监控的状态,不关注历史;
- zabbix,则是把每一次监控的数值反馈出来,数值存到数据库里面,方便后期数据图去分析监控整个状态;
- nagios不需要mysql的支持,不能成图,若需要画图,得安装插件以后才支持web界面;
- ccti 也需要mysql的支持,也可以成图,可以记录历史数据
- zabbix 在web界面下管理得非常彻底,可以增加监控节
2、zabbix监控介绍
- 主流有3.2版本,最新的是3.4版本;更新快,使用的用户多;
- C/S架构,基于C++开发,监控中心支持web界面配置和管理
- zabbix软件,是C/S架构:有一个服务端,去客户端抓数据。在客户端必须要有一个服务启动运行才可以抓取数据;数据可以主动的上报服务端,也可以让服务端去连接客户端获取(通过抓取数据方式,数据获取分两个模式,一个主动模式,一个被动模式),zabbix软件基于C++开发,监控中心需要一个PHP的web环境,因为要开启一个web界面配置和管理
- 单台server节点(即一台server),理论上 可以支持上万台客户端
- 瓶颈:在于采集数据的量,虽然支持上万台,但监控的项目过多,还是会导致zabbix效率降低;所以,当服务器大到一定规模的时候,就需要对zabbix进行优化
- 解决方法:可以增加一些代理点,这些代理点充当server,替代server去采集数据,最终得到分析结果再汇报给主服务端server
zabbix包含有五个组件:
- zabbix-server 监控中心,接收客户端上报信息,负责配置、统计、操作数据
- 数据存储 存放数据,比如mysql
- web界面 也叫web UI,在web界面下操作配置是zabbix简单易用的主要原因(如果没有web界面,就无法在浏览器上配置它)
- zabbix-proxy 可选组件,它可以代替zabbix-server的功能,减轻server的压力(当机器量很多的时候,可以使用zabbix-proxy)
- 有时候,服务器分布在多个机房里,每个机房的服务器之间都是一个单独的内网,这时候就可以在某一个局域网里搭建一个 zabbix-proxy ,用这台 proxy 去监控局域网里的机器
- zabbix-agent 客户端软件(每一台客户端都需要安装agent),负责采集各个监控服务或项目的数据,并上报
zabbix监控流程图:
3、安装zabbix
准备工作
-
两台机器,一台作为服务端(监控中心),另外一台作为它的客户端
-
zabbix,可以直接yum安装,但需要安装epel扩展源,在epel扩展源里面安装的zabbix的版本,最高是2.2版本,比较旧,所以使用官方提供的repo源
-
在两台机器都需要下载:wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
[root@aminglinux ~]#wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
- 下载完之后,安装rpm包:rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm
[root@aminglinux ~]#rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm
- 查看/etc/yum.repos.d/目录下面会看到增加了一个zabbix.repo
[root@aminglinux ~]# ls /etc/yum.repos.d/ CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo epel-testing.repo CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo epel.repo zabbix.repo [root@aminglinux ~]# cat /etc/yum.repos.d/zabbix.repo [zabbix] name=Zabbix Official Repository - $basearch baseurl=http://repo.zabbix.com/zabbix/3.2/rhel/7/$basearch/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591 [zabbix-non-supported] name=Zabbix Official Repository non-supported - $basearch baseurl=http://repo.zabbix.com/non-supported/rhel/7/$basearch/ enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX gpgcheck=1
yum安装zabbix
- yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql
- zabbix-agent //客户端软件
- zabbix-get //服务端用的一个工具,这个工具可以通过命令行的形式,获得客户端某些监控项目的数据
- zabbix-server-mysql //这个是服务端跟mysql打交道相关的组件
- zabbix-web //webUI ,web界面
- zabbix-web-mysql //web和mysql相关组件
- 服务端是需要安装这些所有的包,而在客户端仅需要安装 zabbix-agent 包
A机器 [root@aminglinux ~]# yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql B机器 [root@localhost ~]# yum install -y zabbix-agent
- 安装mysql(之前已经安装,没有yum安装)
[root@aminglinux ~]# ps aux|grep mysql root 1039 0.0 0.1 115428 1716 ? S 22:17 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/aminglinux.pid mysql 1254 0.9 44.8 981304 452500 ? Sl 22:17 0:08 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/aminglinux.err --pid-file=/data/mysql/aminglinux.pid --socket=/tmp/mysql.sock
root 1418 0.0 0.0 112720 984 pts/0 S+ 22:33 0:00 grep --color=auto mysql
- 修改mysql的配置文件,修改/etc/my.cnf文件,设定默认的字符集,使web界面支持中文不会乱码;
[root@aminglinux ~]#vim /etc/my.cnf 在[mysqld]下添加字符集 character_set_server = utf8
- 重启mysql服务:/etc/init.d/mysqld restart
[root@aminglinux ~]# /etc/init.d/mysqld restart Shutting down MySQL.. SUCCESS! Starting MySQL...... SUCCESS!
- 建立zabbix的mysql库和访问用户:
[root@aminglinux ~]# mysql -uroot -p123456 Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.35-log MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create database zabbix character set utf8; //创建zabbix库,并指定编码为utf8 Query OK, 1 row affected (0.00 sec) mysql> grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by '123456'; //创建用户zabbix,写入123456库 Query OK, 0 rows affected (0.01 sec) mysql> quit Bye
- 导入原始数据到zabbix库:自带库数据在/usr/share/doc/zabbix-server-mysql-3.2.11/ 目录下
[root@aminglinux ~]# cd /usr/share/doc/zabbix-server-mysql-3.2.11/ [root@aminglinux zabbix-server-mysql-3.2.11]# ls AUTHORS ChangeLog COPYING create.sql.gz NEWS README [root@aminglinux zabbix-server-mysql-3.2.11]# gzip -d create.sql.gz [root@aminglinux zabbix-server-mysql-3.2.11]# ls AUTHORS ChangeLog COPYING create.sql NEWS README [root@aminglinux zabbix-server-mysql-3.2.11]# mysql -uroot -p123456 zabbix < create.sql Warning: Using a password on the command line interface can be insecure.
- 启动zabbix-server服务、httpd服务:停掉nginx服务以免httpd80端口被nginx占用
[root@aminglinux zabbix-server-mysql-3.2.11]# systemctl stop nginx [root@aminglinux zabbix-server-mysql-3.2.11]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 697/rpcbind tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 928/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1216/master tcp6 0 0 :::111 :::* LISTEN 697/rpcbind tcp6 0 0 :::22 :::* LISTEN 928/sshd tcp6 0 0 ::1:25 :::* LISTEN 1216/master tcp6 0 0 :::3306 :::* LISTEN 1791/mysqld [root@aminglinux zabbix-server-mysql-3.2.11]# systemctl start zabbix-server //启动zabbix-server [root@aminglinux zabbix-server-mysql-3.2.11]# ps aux|grep zabbix zabbix 2212 0.0 0.3 254588 3480 ? S 10:24 0:00 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf root 2215 0.0 0.0 112676 984 pts/0 S+ 10:24 0:00 grep --color=auto zabbix [root@aminglinux zabbix-server-mysql-3.2.11]# systemctl start httpd //启动httpd [root@aminglinux zabbix-server-mysql-3.2.11]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 697/rpcbind tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 928/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1216/master tcp6 0 0 :::111 :::* LISTEN 697/rpcbind tcp6 0 0 :::80 :::* LISTEN 2222/httpd tcp6 0 0 :::22 :::* LISTEN 928/sshd tcp6 0 0 ::1:25 :::* LISTEN 1216/master tcp6 0 0 :::3306 :::* LISTEN 1791/mysqld [root@aminglinux zabbix-server-mysql-3.2.11]# ps aux|grep httpd root 2222 2.7 1.5 394388 15484 ? Ss 10:25 0:01 /usr/sbin/httpd -DFOREGROUND apache 2224 0.0 0.7 394524 7692 ? S 10:25 0:00 /usr/sbin/httpd -DFOREGROUND apache 2225 0.0 0.7 394524 7692 ? S 10:25 0:00 /usr/sbin/httpd -DFOREGROUND apache 2226 0.0 0.7 394524 7692 ? S 10:25 0:00 /usr/sbin/httpd -DFOREGROUND apache 2227 0.0 0.7 394524 7692 ? S 10:25 0:00 /usr/sbin/httpd -DFOREGROUND apache 2228 0.0 0.7 394524 7692 ? S 10:25 0:00 /usr/sbin/httpd -DFOREGROUND root 2232 0.0 0.0 112676 984 pts/0 S+ 10:25 0:00 grep --color=auto httpd
- 设置开机启动zabbix-server,开机启动httpd,nginx开机不启动
[root@aminglinux zabbix-server-mysql-3.2.11]# systemctl enable zabbix-server Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/system/zabbix-server.service. [root@aminglinux zabbix-server-mysql-3.2.11]# systemctl enable httpd Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service. [root@aminglinux zabbix-server-mysql-3.2.11]# chkconfig nginx off
- 开启zabbix服务后,进程正常,但是没有监听端口:需要查看日志排查错误
[root@aminglinux ~]# ps aux|grep zabbix //有zabbix进程 zabbix 2212 0.0 0.3 254588 3480 ? S 10:24 0:00 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf root 2289 0.0 0.0 112676 984 pts/0 S+ 10:32 0:00 grep --color=auto zabbix [root@aminglinux ~]# netstat -lntp //但是没有zabbix端口监听 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 697/rpcbind tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 928/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1216/master tcp6 0 0 :::111 :::* LISTEN 697/rpcbind tcp6 0 0 :::80 :::* LISTEN 2222/httpd tcp6 0 0 :::22 :::* LISTEN 928/sshd tcp6 0 0 ::1:25 :::* LISTEN 1216/master tcp6 0 0 :::3306 :::* LISTEN 1791/mysqld
- 查看zabbix并没有监听端口后,首先检查zabbix的错误日志,错误日志路径/var/log/zabbix/zabbix_server.log
[root@aminglinux ~]# tail /var/log/zabbix/zabbix_server.log 2212:20180726:103621.166 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 2212:20180726:103621.166 database is down: reconnecting in 10 seconds 2212:20180726:103631.167 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 2212:20180726:103631.167 database is down: reconnecting in 10 seconds [root@aminglinux ~]# tail -3 /var/log/zabbix/zabbix_server.log 2212:20180726:103641.168 database is down: reconnecting in 10 seconds 2212:20180726:103651.168 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 2212:20180726:103651.169 database is down: reconnecting in 10 seconds
- 虽然zabbix服务有进程,但没有彻底的起来,说明不能够连接mysql,所以还需要更改zabbix的配置文件;配置文件为/etc/zabbix/zabbix_server.conf;
[root@aminglinux ~]# vim /etc/zabbix/zabbix_server.conf 搜索/DBHost 在DBName=zabbix上面增加 DBHost=127.0.0.1 在DBuser下面增加 DBPassword=123456
- 因为mysql和zabbix装在同一台机器上,这里的 DBHost可以写localhost 或者127.0.0.1;如果是在生产环境上,有时候为了提升zabbix的性能,可能会把MySQL装在其他机器上,这是的DBHost,就需要写上mysql的ip
- 启动zabbix服务,查看zabbix进程,监听的端口10051
[root@aminglinux ~]# systemctl restart zabbix-server.service [root@aminglinux ~]# netstat -lntp|grep zabbix tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 2174/zabbix_server tcp6 0 0 :::10051 :::* LISTEN 2174/zabbix_server [root@aminglinux ~]# systemctl restart zabbix-server [root@aminglinux ~]# ps aux |grep zabbix |wc -l 29
- 关闭防火墙:
[root@aminglinux ~]# systemctl stop firewalld [root@aminglinux ~]# setenforce 0 setenforce: SELinux is disabled
- 配置web界面:打开浏览器输入 192.168.222.110/zabbix,打开zabbix配置页面
- 打开zabbix界面后,点击 Next step ,会出现一个提示,出现OK的都不用管,会看到提示需要去设置php的timezone时区
- 设置php的timezone时区,在php的配置文件中设置,默认php的配置文件在/etc/php.ini 里面
[root@aminglinux ~]# vim /etc/php.ini 搜索 /timezone 将 ;date.timezone 改为如下 date.timezone = Asia/Shanghai
- 在定义完php的配置文件,还需要重启apache;刷新浏览器,会发现都变成OK了
[root@aminglinux ~]#systemctl restart httpd
-
再来 Next step ,来配置数据库相关信息
-
host :MySQL所在机器IP
-
port:0为默认端口3306,如果有改动就修改
-
name:库的名字
-
user:库的用户
-
password:用户的密码
-
然后再选择Next step ,配置站点名字相关
-
host:站点主机名
-
port:端口,如果有改动就改,没改动,默认就是10051
-
name:站点的名字
-
配置完成后会有一个信息显示,如果配置错误,可以back返回上一步重新修改
-
登录管理页,默认的账号是Admin,密码为zabbix
-
在登录进zabbix之后,首先需要去更改密码(因为默认的密码大家都知道的),若是在线上环境不更改密码,很容易被别人拿到后台权限
-
更改密码,先选择 Administration ,然后选择 Users
-
然后找到Admin,并点进去,选择 Change password 修改密码和选择语言(支持中文),然后保存退出;刷新浏览器便变成中文版界面;
客户端安装zabbix(B机器)
- 在客户端上也需要下载zabbix的yum源
- wget repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
- rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm
- yum install -y zabbix-agent
[root@aming2 ~]# yum install -y zabbix-agent
- 配置B机器的zabbix-agent的配置文件:指定zabbix服务端的信息等
[root@aming2 ~]# vim /etc/zabbix/zabbix_agentd.conf Server=192.168.222.110 # 定义服务端的ip(被动模式) ServerActive=192.168.222.110 #定义服务端的ip(主动模式) #这个涉及到一个主动和被动模式;如果这里不填写服务中心的IP,那么就只能使用被动模式;这个IP是主动模式时候用的 Hostname=Zabbix server修改为Hostname=test #这是自定义的主机名,一会还需要在web界面下设置同样的主机名
- 启动zabbix服务;查看zabbix服务,监听的端口,客户端监听的端口是10050
[root@aming2 ~]# systemctl start zabbix-agent [root@aming2 ~]# ps aux |grep zabbix zabbix 1821 0.3 0.1 80736 1264 ? S 18:24 0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf zabbix 1822 0.0 0.1 80736 1344 ? S 18:24 0:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec] zabbix 1823 0.2 0.1 80736 1828 ? S 18:24 0:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection] zabbix 1824 0.0 0.2 80736 2036 ? S 18:24 0:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection] zabbix 1825 0.0 0.1 80736 1844 ? S 18:24 0:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection] zabbix 1826 0.0 0.2 80864 2196 ? S 18:24 0:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec] root 1828 0.0 0.0 112676 980 pts/0 S+ 18:24 0:00 grep --color=auto zabbix [root@aming2 ~]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:50091 0.0.0.0:* LISTEN 1027/rpc.statd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 650/rpcbind tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 1030/rpc.mountd tcp 0 0 0.0.0.0:45045 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1023/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1270/master tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 1821/zabbix_agentd tcp6 0 0 :::38283 :::* LISTEN 1027/rpc.statd tcp6 0 0 :::111 :::* LISTEN 650/rpcbind tcp6 0 0 :::20048 :::* LISTEN 1030/rpc.mountd tcp6 0 0 :::22 :::* LISTEN 1023/sshd tcp6 0 0 ::1:25 :::* LISTEN 1270/master tcp6 0 0 :::39006 :::* LISTEN - tcp6 0 0 :::2049 :::* LISTEN - tcp6 0 0 :::10050 :::* LISTEN 1821/zabbix_agentd tcp6 0 0 :::3306 :::* LISTEN 1201/mysqld
- 设置开机启动;客户端的zabbix配置完成
[root@aming2 ~]# systemctl enable zabbix-agent Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
4、忘记Admin密码如何做
- 进入mysql命令行,选择zabbix库
- mysql -uroot -p zabbix
- update users set passwd=md5(‘newpasswd’) where alias=‘Admin’;
- 这样就更改了Admin用户的密码
- 进去mysql,直接修改zabbix库的users表的密码信息:
[root@aminglinux ~]# mysql -uroot -p123456 Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 394 Server version: 5.6.35 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use zabbix //使用zabbix库 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; //查看zabbix相关的表,以后服务器监控的主机越多,那么这些表会越来越大,所以需要去指定合适的监控策略 +----------------------------+ 127 rows in set (0.00 sec) mysql> desc users; //查看users表 +----------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------+---------------------+------+-----+---------+-------+ | userid | bigint(20) unsigned | NO | PRI | NULL | | | alias | varchar(100) | NO | UNI | | | | name | varchar(100) | NO | | | | | surname | varchar(100) | NO | | | | | passwd | char(32) | NO | | | | | url | varchar(255) | NO | | | | | autologin | int(11) | NO | | 0 | | | autologout | int(11) | NO | | 900 | | | lang | varchar(5) | NO | | en_GB | | | refresh | int(11) | NO | | 30 | | | type | int(11) | NO | | 1 | | | theme | varchar(128) | NO | | default | | | attempt_failed | int(11) | NO | | 0 | | | attempt_ip | varchar(39) | NO | | | | | attempt_clock | int(11) | NO | | 0 | | | rows_per_page | int(11) | NO | | 50 | | +----------------+---------------------+------+-----+---------+-------+ 16 rows in set (0.00 sec)
- 需要修改的是passwd的表;修改密码:update users set passwd=md5(‘newpasswd’) where alias=‘Admin’;
mysql> update users set passwd=md5('aminglinux') where alias='Admin'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from users\G; //查看表的情况 *************************** 1. row *************************** userid: 1 alias: Admin name: Zabbix surname: Administrator passwd: 683cb8e76a8889fdc5161e3fa7e51f2d url: autologin: 1 autologout: 0 lang: zh_CN refresh: 30 type: 3 theme: default attempt_failed: 0 attempt_ip: attempt_clock: 0 rows_per_page: 50 *************************** 2. row ***************************
修改后重新用新密码登录。
5、主动模式和被动模式
- 针对的对象是zabbix-agent:
1、被动模式:agent被动接受server的连接,把监控数据信息递给服务端server,服务端发起连接agent获取监控数据。 2、主动模式:agent主动上报监控数据给server,server端负责接收数据。agent定义监控项目:cpu负载、网卡流量等,在固定时间(例如每隔30秒)上报给server,server存到mysql里
- 当agent数量很多的时候,可以使用主动模式:降低server端的压力。当agent只有几十台机器的时候用主动被摸模式都可以。
- 当服务端server有公网ip,agent只有内网ip(但agent可以连接外网),则适合用主动模式上报,因为server端连接不到agent,而agent能够找到server。
6、添加监控主机
1、配置-->主机群组:新建群组test 2、配置-->主机:新建主机test01,绑定群组test,设置要监控agent的ip 3、监控项-->选择主动或被动模式 4、应用集(大项)、监控项(子项):选择需要监控的项目,如cpu负责、内存、网卡等信息 5、触发器:针对定义的监控项,设置告警的规则,级别有:警告、信息、一般严重、严重、灾难等 6、图形:根据监控项的历史数据,形成图示。 7、自动发现规则:默认有文件系统的:例如磁盘使用信息、使用量、分区等;网卡信息:在web场景监控网站状态码等。
-
在web页面配置添加监控主机,选择 配置 ,在选择 主机群组 ,新建群组test
-
新建主机test01,绑定群组test,设置要监控agent的ip
-
监控项--选择主动或被动模式
-
定义主动和被动模式,在 监控项 里定义
在定义完主机后看到: 应用集、监控项、触发器、自动发现规则、web场景 应用集:应用集就是监控项的集合,应用集的目的是为了更方便的去管理监控项 监控项:监控的项目 触发器:就是针对某一个项目,设置的一个告警规则 图形:相关数据的图表化 自动发现规则:自动抓取机器的两个信息,并生产图片和触发器一个是文件系统,另一个网卡 web场景:用于监控web站点
7、添加自定义模板
- 以自定义一个常用模板,方便给新增主机添加监控项目
- 自定义test模板:把其他自带模板里面的某些监控项目(比如cpu、内存等)复制到模板里
- 自定义模版后,就可以在主机上,链接自定义的模版了
8、处理图形中的乱码
- 监控主机形成历史监控数据图形,会出现中文字无法显示正常的问题:
- 编辑配置文件,查找图形字体的配置文件位置:
vim /usr/share/zabbix/include/defines.ini.php ZBX_FONTPATH realpath('fonts') //相对路径是fonts,相对于/usr/share/zabbix/ 目录 define('ZBX_GRAPH_FONT_NAME','graphfont'); //指定了字体文件为graphfont.ttf fonts目录下的字体文件就是graphfont.ttf,他是软链接文件 --> /etc/alternatives/zabbix-web-font --> /usr/share/fonts/dejavu/DejaVuSans.ttf 2、我么把windows系统上的字体文件,复制
- windows字体路径为“C:\Windows\Fonts\”,找到“simfang.ttf”(其实就是那个仿宋简体),先把它复制到桌面上,然后上传到linux的/usr/share/zabbix/fonts/,把原来的graphfont.ttf改名拷贝起来,并且做软链接ln -s SIMLI.TTF graphfont.ttf
[root@aminglinux ~]# cd /usr/share/zabbix/fonts/ [root@aminglinux fonts]# ls graphfont.ttf simfang.ttf [root@aminglinux fonts]# mv graphfont.ttf graphfont.ttf.bak [root@aminglinux fonts]# ln -s simfang.ttf graphfont.ttf [root@aminglinux fonts]# ll 总用量 3904 lrwxrwxrwx 1 root root 11 7月 26 20:52 graphfont.ttf -> simfang.ttf lrwxrwxrwx 1 root root 33 7月 26 15:43 graphfont.ttf.bak -> /etc/alternatives/zabbix-web-font -rw-r--r-- 1 root root 3996872 7月 26 20:51 simfang.ttf [root@aminglinux fonts]#
- 刷新一下web页面,图形就能显示中文了
9、自动发现
1、设置发动发现的时间间隔:默认1h,可以设置为10分钟
2、点击自动发现规则的名称,进去配置规则,数据更新间隔为:30秒,基本没有系统压力,重启服务即可生效。
3、配置-->模版-->自动发现-->图形原型-->可以修改图形的颜色形状等。
10、添加自定义监控项目
-
很多监控项目是在模版里面配置体现出来的,但有时候会有一些个性化的需求,比如就是想知道某一个业务的数据,运营人员想知道网站注册量,和会员活动每天的活跃度,这些数据实际上是可以通过数据库里面的表体现出来的,但是在Zabbix不可以提供这么详细的监控项目,当遇到这种需求怎么办? 当遇到这种需求需要一个在客户端写一个shell脚本,把这个数值展现出来,通过一个监控项目,再去形成图表,给运营人员分析每星期的数值,以及每个月的数值趋势走向. zabbix在这点上还是不错的,可以自定义去监控一个项目.
-
需求:监控某台web的80端口连接数,并出图
-
解决方法:两步:1)zabbix监控中心创建监控项目;2)针对该监控项目以图形展现
- 首先需要在客户端(B机器)定义脚本,并赋予zabbix用户 执行权限;
[root@aming2 ~]# vim /usr/local/sbin/estab.sh #!/bin/bash ##获取80端口并发连接数 netstat -ant |grep ':80 ' |grep -c ESTABLISHED //注:netstat -ant 是可以查看连接数的
[root@aming2 ~]# vim /usr/local/sbin/estab.sh [root@aming2 ~]# vim /usr/local/sbin/estab.sh [root@aming2 ~]# chmod 755 /usr/local/sbin/estab.sh [root@aming2 ~]# ll /usr/local/sbin/estab.sh -rwxr-xr-x. 1 root root 91 7月 26 23:30 /usr/local/sbin/estab.sh
- 第2步:编辑客户端的配置文件
[root@aming2 ~]# vim /etc/zabbix/zabbix_agentd.conf 搜索 /UnsafeUserParameters 将# UnsafeUserParameters=0 改为UnsafeUserParameters=1 #目的是使用自定义脚本 搜索 /UserParameter 将# UserParameter= 改为UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh #表示自定义监控项的key为my.estab.count,后面的[*]里面写脚本的参数,如果没有参数则可以省略,如果有参数写入到 [ ] 里面,用逗号分隔,脚本为/usr/local/sbin/estab.sh
- B机器:重启 zabbix-agent 服务
[root@aming2 ~]# systemctl restart zabbix-agent
- 在服务端测试客户端写的脚本是否有效
[root@aminglinux ~]# zabbix_get -s 192.168.222.111 -p 10050 -k 'my.estab.count' 0
zabbix_get -s 192.168.222.111 -p 10050 -k 'my.estab.count'
-s 指定客户端的IP地址
-p 指定端口,不加-p,默认就是10050端口
-k 表示 键值
-
测试不成功则检查防火墙有没有关闭
-
在zabbix监控中心(浏览器)配置增加监控项目,
在 配置 —— 主机 ——创建监控项 名称 写为:并发链接数 类型 :选择zabbix客户端 键值 写:my.estab.count——>键值可自定义,是不固定的 单位 :保持默认 历史数据保留时长(单位天):默认保持90天 应用集:可以不选择,因为没有定义应用集
-
在添加该项目后,还需要添加图形,配置——主机——图形——创建图形
-
做一个触发器,选择触发器——创建触发器
点击触发器 --创建触发器 --名称 :并发连接数 -- 严重性 -- 选择告警 --表达式 --添加 -- 监控项目 --点击选择--选中并发连接数 -- 功能 选择 最新的T值<N --> N 定义为200 (意思是并发数达到200就告警) --添加
11、配置邮件告警
-
使用第三方邮箱进行告警邮件的发送,这里使用163邮箱进行配置。
-
登录163邮箱网页版,开启POP3/SMTP/IMAP服务,设置授权码与zabbix进行通信认证
登录163邮箱 -->点击设置 -->选择POP3/SMTP/IMAP -->POP3/IMAP服务 和SMTP/IMAP服务 选中 --> 会提示让我们设置授权码 --> 确定 -->开启 -->提示手机验证 -->输入手机发来的验证码 -->确定 -->设置授权码 -->确定 -->保存
- 在Zabbix监控中心设置报警媒介类型;
点击管理设置-->告警媒介类型 -->创建报警媒介类型 --> 名称 自定义 --> 类型 选择脚本 -->脚本名称 自定义 -->添加 -->定义脚本参数 --添加
脚本参数含义: {ALERT.SENDTO} -- 发邮件给谁 {ALERT.SUBJECT} -- 邮件标题 {ALERT.MESSAGE} -- 邮件内容
- 创建告警脚本
- 在服务端(A机器)创建报警脚本mail.py ,先查看报警脚本所在位置
[root@aminglinux ~]# vim /etc/zabbix/zabbix_server.conf 搜索/AlertScripts AlertScriptsPath=/usr/lib/zabbix/alertscripts #报警脚本所在路径
- 创建报警脚本mail.py ,在/usr/lib/zabbix/alertscripts/目录创建,脚本内容参考:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py
[root@aminglinux ~]# cd /usr/lib/zabbix/alertscripts/ [root@aminglinux alertscripts]# vim mail.py #!/usr/bin/env python #-*- coding: UTF-8 -*- import os,sys reload(sys) sys.setdefaultencoding('utf8') import getopt import smtplib from email.MIMEText import MIMEText from email.MIMEMultipart import MIMEMultipart from subprocess import * def sendqqmail(username,password,mailfrom,mailto,subject,content): gserver = 'smtp.qq.com' gport = 25 try: msg = MIMEText(unicode(content).encode('utf-8')) msg['from'] = mailfrom msg['to'] = mailto msg['Reply-To'] = mailfrom msg['Subject'] = subject smtp = smtplib.SMTP(gserver, gport) smtp.set_debuglevel(0) smtp.ehlo() smtp.login(username,password) smtp.sendmail(mailfrom, mailto, msg.as_string()) smtp.close() except Exception,err: print "Send mail failed. Error: %s" % err def main(): to=sys.argv[1] subject=sys.argv[2] content=sys.argv[3] ##定义QQ邮箱的账号和密码,你需要修改成你自己的账号和密码(请不要把真实的用户名和密码放到网上公开,否则你会死的很惨) sendqqmail('[email protected]','aaaaaaaaaa','[email protected]',to,subject,content) if __name__ == "__main__": main() #####脚本使用说明######
#1. 首先定义好脚本中的邮箱账号和密码 #2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容"
更改mail.py脚本的权限(很重要!!!),否则就会无法告警
[root@aminglinux ~]# chmod 755 /usr/lib/zabbix/alertscripts/mail.py
- 测试能否发邮件
[root@aminglinux alertscripts]# python mail.py [email protected] "test" "test"