19.1 Linux监控平台介绍

监控存在的原因

站点出了问题,没有人知道,等用户发现了,才提醒供应商;对公司影响很大

常见开源监控软件

  1. cacti、nagios、zabbix、smokeping、open-falcon等等 //主流 nagios、zabbix
  2. cacti、smokeping偏向于基础监控,成图非常漂亮 //比较适合监控网络设备
  3. cacti、nagios、zabbix服务端监控中心,需要php环境支持,其中zabbix和cacti都需要mysql作为数据存储,nagios不用存储历史数据,注重服务或者监控项的状态,zabbix会获取服务或者监控项目的数据,会把数据记录到数据库里,从而可以成图;

因为zabbix配置简单,优势明显,早起使用nagios的企业,慢慢的转向使用zabbix

nagios,需要更改配置文件,并不支持web界面一键执行,nagios和zabbix相比,nagios\ 更注重的是某一个监控的状态,不关注历史;zabbix,则是把每一次监控的数值反馈出来,方便后期数据图去分析监控整个状态;nagios不支持mysql,需要安装插件以后才支持web界面;zabbix 支持mysql,可以成图,可以记录历史数据

zabbix 在web界面下管理得非常彻底,可以增加监控节点,报警预知等等

• open-falcon为小米公司开发,开源后受到诸多大公司和运维工程师的追捧,适合大企业,滴滴、360、新浪微博、京东等大公司在使用这款监控软件,监控的思想和结构值得研究

• 后续以介绍zabbix为主

19.2 zabbix监控介绍

•C/S架构:有一个服务端,去客户端抓数据。在客户端必须要有一个服务运行才可以抓取数据;数据可以主动的上报服务端,也可以让服务端去连接客户端获取(通过抓取数据方式,数据获取分两个模式,一个主动模式,一个被动模式),基于C++开发,监控中心需要一个PHP的web环境,因为要开启一个web界面配置和管理 • 单server节点可以支持上万台客户端(瓶颈在于采集数据的量,虽然支持上万台,但监控的项目过多,还是会导致zabbix效率降低;所以,当服务器大到一定规模的时候,就需要对zabbix进行优化,解决方法:可以增加一些代理点,这些代理点充当server替代server去采集数据,最终才上报回给主服务端) • 最新版本3.4,官方文档https://www.zabbix.com/manuals • 5个组件

1. zabbix-server 监控中心,接收客户端上报信息,负责配置、统计、操作数据

      数据存储 存放数据,比如mysql

1. web界面 也叫web UI,在web界面下操作配置是zabbix简单易用的主要原因
2. zabbix-proxy 可选组件,它可以代替zabbix-server的功能,减轻server的压力


1. zabbix-agent 客户端软件(每一台客户端都需要安装),负责采集各个监控服务或项目的数据,并上报

监控流程图:

视频监控nginx下载_php

19.3/19.4/19.6 安装zabbix

安装服务端

默认yum安装的zabbix版本是2.2的太旧,所以选择安装官方提供的repo源

wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm

安装repo源

rpm -ivh zabbix-release-3.2-1.el7.noarch.rpm

然后就可以yum 安装zabbix 所需组件

yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql
  1. zabbix-agent //客户端软件
  2. zabbix-get //服务端用的一个工具,这个工具,可以通过命令行的形式,获得客户端某些监控项目的数据
  3. zabbix-server-mysql //这个是服务端跟mysql打交道相关的组件
  4. zabbix-web //webUI
  5. zabbix-web-mysql //web和mysql相关组件

zabbix 是基于php环境的,也就是说用的是php 的代码编写的web界面,也就说这个zabbix 相当于一个站点

因为是网站,而且是基于lamp 的,如果没有这个环境的话,需要去安装一下

编译mysql的配置文件

给mysql设定一个默认的字符集

vim /etc/my.cnf //[mysqld] 下,加入以下内容

character_set_server = utf8

如果不设置字符集的话,后期zabbix的web界面,设置成中文的话,可能就会出现乱码

修改了配置文件,记得重启mysql

[root@aminglinux-02 src]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL.. SUCCESS!

创建zabbix的库

登录mysql

[root@aminglinux-02 src]# mysql -uroot -paminglinux

create database zabbix character set utf8;  //指定字符集

grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'aming-zabbix';

创建一个用户,这个用户是需要让web(php)代码连接mysql的,监控中心这个服务启动的前提就是要连接mysql;客户端采集了数据,需要把这些数据传递给服务端,那么服务端怎么把这些数据写入到MySQL去,这时就涉及到了mysql 的用户,涉及到了mysql 的数据库;用哪一个用户,去写入那一个库。
后期,配置zabbix的DBHost的时候 需要和这个IP对应

导入原始数据

cd /usr/share/doc/zabbix-server-mysql-3.2.7
[root@aminglinux-02 zabbix-server-mysql-3.2.7]# ls
AUTHORS  ChangeLog  COPYING  create.sql.gz  NEWS  README
[root@aminglinux-02 zabbix-server-mysql-3.2.7]# gzip -d create.sql.gz
[root@aminglinux-02 zabbix-server-mysql-3.2.7]#mysql -uroot -paminglinux zabbix < create.sql

缺少这些数据,zabbix就没有办法工作,就没有办法在web界面下展现给我们

启动zabbix-server、httpd

systemctl start zabbix-server
systemctl start httpd

zabbix是基于lamp环境的,所以启动的时候,要看看httpd服务是否启动 因为在之前的章节,服务端安装有lnmp环境,所以启动httpd之前记得先把nginx服务先关掉,因为nginx用的是80端口,而httpd也是80端口,两个服务会冲突

配置服务器的自动启动

[root@aminglinux-02 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@aminglinux-02 ~]# 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-02 ~]# chkconfig nginx off

需要关闭nginx自启动

检查服务运行状况

ps aux |grep httpd
[root@aminglinux-02 ~]# ps aux |grep httpd
root      2895  0.0  0.8 393816 15368 ?        Ss   01:37   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2897  0.0  0.4 393952  7656 ?        S    01:37   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2898  0.0  0.4 393952  7656 ?        S    01:37   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2899  0.0  0.4 393952  7656 ?        S    01:37   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2900  0.0  0.4 393952  7656 ?        S    01:37   0:00 /usr/sbin/httpd -DFOREGROUND
apache    2901  0.0  0.4 393952  7656 ?        S    01:37   0:00 /usr/sbin/httpd -DFOREGROUND
root      2930  0.0  0.0 112664   976 pts/0    R+   01:47   0:00 grep --color=auto httpd
ps aux |grep zabbix
[root@aminglinux-02 ~]# ps aux |grep zabbix
zabbix    2862  0.0  0.2 255688  3776 ?        S    01:36   0:00 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
root      2932  0.0  0.0 112664   976 pts/0    R+   01:47   0:00 grep --color=auto zabbix

检查一下端口情况

[root@aminglinux-02 ~]# 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      1/systemd
tcp        0      0 0.0.0.0:41648           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      1075/rpc.mountd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1049/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2093/master
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:50915           0.0.0.0:*               LISTEN      1040/rpc.statd
tcp6       0      0 :::3306                 :::*                    LISTEN      2817/mysqld
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd
tcp6       0      0 :::80                   :::*                    LISTEN      2895/httpd
tcp6       0      0 :::20048                :::*                    LISTEN      1075/rpc.mountd
tcp6       0      0 :::21                   :::*                    LISTEN      961/vsftpd
tcp6       0      0 :::22                   :::*                    LISTEN      1049/sshd
tcp6       0      0 :::34392                :::*                    LISTEN      1040/rpc.statd
tcp6       0      0 ::1:25                  :::*                    LISTEN      2093/master
tcp6       0      0 :::43297                :::*                    LISTEN      -
tcp6       0      0 :::2049                 :::*                    LISTEN      -

启动之后发现,zabbix监听的端口没不在列表里

检查一下日志,看看是什么问题

/var/log/zabbix/zabbix_server.log
[root@aminglinux-02 ~]# tail /var/log/zabbix/zabbix_server.log
  2862:20170908:014910.399 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  2862:20170908:014910.399 database is down: reconnecting in 10 seconds
  2862:20170908:014920.400 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  2862:20170908:014920.400 database is down: reconnecting in 10 seconds
  2862:20170908:014930.402 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  2862:20170908:014930.402 database is down: reconnecting in 10 seconds
  2862:20170908:014940.405 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  2862:20170908:014940.406 database is down: reconnecting in 10 seconds
  2862:20170908:014950.407 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  2862:20170908:014950.407 database is down: reconnecting in 10 seconds

查看到的“连接数据库' zabbix '失败:[2002]不能通过socket / var / lib / MySQL / MySQL连接到本地MySQL服务器。”

修改一下 zabbix的配置文件

vim /etc/zabbix/zabbix_server.conf //修改或增加如下内容
DBHost=127.0.0.1  
DBName=zabbix
DBUser=zabbix
DBPassword=aming-zabbix

因为mysql和zabbix装在同一台机器上,这里可以写localhost或者127.0.0.1;如果是在生产环境上,有时候为了提升zabbix的性能,可能会把MySQL装在其他机器上,这是的DBHost,就需要写上mysql的ip

配置好以后,重启zabbix-server服务

systemctl restart zabbix-server

检查一下进程

[root@aminglinux-02 ~]# ps aux |grep zabbix|wc -l
29

发现运行了很多进程,正常的话,至少运行了29个以上的进程,才的对的启动

查看一下端口

[root@aminglinux-02 ~]# 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      1/systemd
tcp        0      0 0.0.0.0:41648           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      1075/rpc.mountd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1049/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2093/master
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      2952/zabbix_server
tcp        0      0 0.0.0.0:50915           0.0.0.0:*               LISTEN      1040/rpc.statd
tcp6       0      0 :::3306                 :::*                    LISTEN      2817/mysqld
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd
tcp6       0      0 :::80                   :::*                    LISTEN      2895/httpd
tcp6       0      0 :::20048                :::*                    LISTEN      1075/rpc.mountd
tcp6       0      0 :::21                   :::*                    LISTEN      961/vsftpd
tcp6       0      0 :::22                   :::*                    LISTEN      1049/sshd
tcp6       0      0 :::34392                :::*                    LISTEN      1040/rpc.statd
tcp6       0      0 ::1:25                  :::*                    LISTEN      2093/master
tcp6       0      0 :::43297                :::*                    LISTEN      -
tcp6       0      0 :::2049                 :::*                    LISTEN      -
tcp6       0      0 :::10051                :::*                    LISTEN      2952/zabbix_server

一直弄好,去配置一下zabbix的web页面 192.168.133.131/zabbix

视频监控nginx下载_mysql_02

提示需要配置时区

时区在php.ini的配置文件下配置

vim /etc/php.ini   //因为是yum安装,所以默认的php.ini在/etc/ 下
date.timezone = Asia/Shanghai

配置好之后,记得重启httpd

继续回到配置页面

刷新一下界面

视频监控nginx下载_mysql_03

点击Next step 进行下一步

视频监控nginx下载_php_04

这个地方就是配置数据库相关,

host :MySQL所在机器IP
port:0为默认端口3306,如果有改动就修改
name:库的名字
user:库的用户
password:用户的密码

视频监控nginx下载_网络_05

这里是配置站点名字相关

host:站点主机名
port:端口,如果有改动就改,没改动,默认就是10051
name:站点的名字,你喜欢就好

视频监控nginx下载_php_06

配置完成后会有一个信息显示,如果配置错误,可以back返回上一步重新修改

视频监控nginx下载_视频监控nginx下载_07

安装成功后,会有提示界面,如下图

视频监控nginx下载_操作系统_08

登录管理页
默认的账号是Admin,密码为zabbix,因为是实验,就懒得改动了

视频监控nginx下载_php_09

进入Administration管理项的users用户管理菜单

视频监控nginx下载_php_10

选择admin账户,修改语言,或者管理员密码(因为实验,所以。。)

视频监控nginx下载_视频监控nginx下载_11

修改一下语言就好,密码就懒得弄了

视频监控nginx下载_视频监控nginx下载_12

最终效果

视频监控nginx下载_网络_13

安装客户端

因为没有客户机器,所有看不到有监控项目或者监控数据之类的东西

yum install -y zabbix-agent

编辑配置文件

vim /etc/zabbix/zabbix_agentd.conf  //修改内容如下
Hostname=aming-02  //方便服务中心识别客户端机器
Server=192.168.133.131  //ip为监控中心的IP
ServerActive=192.168.133.131  //这个涉及到一个主动和被动模式;如果这里不填写服务中心的IP,那么就只能使用被动模式;这个IP是主动模式时候用的

配置完成

启动服务

[root@aminglinux-01 src]# systemctl start zabbix-agent

查看一下进程状况

[root@aminglinux-01 src]# ps aux |grep zabbix
zabbix    2482  0.0  0.0  80100  1268 ?        S    03:06   0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
zabbix    2483  0.0  0.0  80100  1244 ?        S    03:06   0:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
zabbix    2484  0.0  0.0  80100  1840 ?        S    03:06   0:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix    2485  0.0  0.0  80100  1840 ?        S    03:06   0:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix    2486  0.0  0.0  80100  1840 ?        S    03:06   0:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
zabbix    2487  0.0  0.1  80100  2136 ?        S    03:06   0:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
root      2489  0.0  0.0 112664   976 pts/0    R+   03:06   0:00 grep --color=auto zabbix

检查一下端口是否开启

[root@aminglinux-01 src]# 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      1/systemd
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2066/nginx: master
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      797/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1605/master
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      2482/zabbix_agentd
tcp6       0      0 :::3306                 :::*                    LISTEN      1975/mysqld
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd
tcp6       0      0 :::80                   :::*                    LISTEN      2066/nginx: master
tcp6       0      0 :::22                   :::*                    LISTEN      797/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      1605/master
tcp6       0      0 :::10050                :::*                    LISTEN      2482/zabbix_agentd

客户端监听的端口是10050

到此,这个zabbix算是安装结束了

19.5 忘记Admin密码如何做

进入mysql的

mysql -uroot -paminglinux;

进入zabbix库

use zabbix;

查看所有表

show tables;

以后监控的服务器,监控的主机很多的话,这些表会越来越多,所有需要指定合适的监控规则、策略,比如数据量需要保存多长时间,那么在定义这个监控项目的时候就该想到,比如要保留1个月还是1年,还是其他时间;比如,监控的站点服务量很大的话,一天就要涨好几个G,那么你的服务器磁盘能支持保存多长时间;

密码默认存放的表是users里面

查看表

desc users;
mysql> desc 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('aminglinux') where alias='Admin';

查看表的情况

mysql> select * from users;
+--------+-------+--------+---------------+----------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+------------+---------------+---------------+
| userid | alias | name   | surname       | passwd                           | url | autologin | autologout | lang  | refresh | type | theme   | attempt_failed | attempt_ip | attempt_clock| rows_per_page |
+--------+-------+--------+---------------+----------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+------------+---------------+---------------+
|      1 | Admin | Zabbix | Administrator | 5fce1b3e34b520afeffb37ce08c7cd66 |     |         1 |          0 | zh_CN |      30 |    3 | default |              0 |            |             0|            50 |
|      2 | guest |        |               | d41d8cd98f00b204e9800998ecf8427e |     |         0 |        900 | en_GB |      30 |    1 | default |              0 |            |             0|            50 |
+--------+-------+--------+---------------+----------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+------------+---------------+---------------+
2 rows in set (0.00 sec)

修改以后就可以去尝试用新密码登录。