zabbix安装和使用

需求

  1. 需要监听nginx是否存活,如果nginx服务挂了,发送邮件通知

说明

  1. zabbix官方部署文档:zabbix部署
  2. 我这里准备了两台服务器,服务端(zabbix server):192.168.1.217,客户端(被监控端,zabbix agent):192.168.1.215

步骤

  1. 根据官方文档部署服务端Zabbix server 。文档没写创建数据库的步骤。
  2. #创建一个zabbix的数据库
    1:create database zabbix character set utf8 collate utf8_bin;
    #创建一个zabbix的用户,密码是123456
    2:create user zabbix@localhost identified by '123456';
    #授权zabbix用户权限
    3:grant all privileges on zabbix.* to zabbix@localhost identified by '123456';
    #生效
    4:flush privileges
    
    
  3. 再根据文档导入数据库就行

  4. 因为我没有安装apache,用的是nginx,所以需要配置一下nginx,注意看root指定的是哪个目录就行

  5. server {
    	listen 80;
    
    	root /usr/share/zabbix/;
    
    	# Add index.php to the list if you are using PHP
    	index index.html index.php index.htm index.nginx-debian.html;
    
    	server_name www.lzabbix.cn;
    
    	location / {
    		# First attempt to serve request as file, then
    		# as directory, then fall back to displaying a 404.
    		try_files $uri $uri/ /index.php?$query_string;
    		#try_files $uri $uri/ =404;
    	}
    
    	# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    	#
    	location ~ \.php$ {
    			try_files $uri /index.php =404;
    			#fastcgi_split_path_info ^(.+\.php)(/.+)$;
    			fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    			fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME                     $document_root$fastcgi_script_name;
    			include fastcgi_params;
    	}
    
    
    }
  6. 安装的过程中需要你修改PHP的配置文件。

  7. 最后在去192.168.1.215上安装zabbix agent 

  8. apt install -y zabbix-agent

使用

  1. 现在在215上修改下nginx的配置如下,注意location /nginx_status配置,之后服务端会定时请求到这里,这样服务端就知道nginx的状态
  2. server {
    	listen 80 default_server;
    	listen [::]:80 default_server;
    	root /var/www/default;
    	# Add index.php to the list if you are using PHP
    	index index.html index.php index.htm index.nginx-debian.html;
    	server_name _;
    
    	location / {
    		# First attempt to serve request as file, then
    		# as directory, then fall back to displaying a 404.
    		#try_files $uri $uri/ =404;
    		try_files $uri $uri/ /index.php?$query_string;
    	}
    	location /nginx_status {
    		stub_status on;
    		access_log off;
       	 }	
    
    
    		location ~ \.php$ {
                    try_files $uri /index.php =404;
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    include fastcgi_params;
            }
    	location ~ /\.ht {
            	deny all;
        	}	
    
    }
    
  3. 重启nginx,直接访问192.168.1.215/nginx_status看下是否正常
  4. 在被监听端215上创建一个脚本,我创建的目录是在/var/local/scripts
  5. #! /bin/bash
    #date: 2020-01-18
    # Description:Zabbix4.0监控Nginx1.16.1性能以及进程状态
    # Note:此脚本需要配置在被监控端
    
    HOST="192.168.1.215"
    PORT="80"
    
    # 检测Nginx进程是否存在
    function ping {
        /bin/pidof nginx | wc -l
    }
    
    # 检测Nginx性能
    function active {
        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
    }
    function reading {
        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
    }
    function writing {
        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
    }
    function waiting {
        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
    }
    function accepts {
        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
    }
    function handled {
        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
    }
    function requests {
        /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
    }
    # 执行function
    $1
    
  6. 给脚本赋予执行权限

  7. chmod a+x /var/local/scripts/ngx_status.sh
  8. 手动测试脚本是否可以跑

  9. /var/local/scripts/ngx_status.sh active

  10.  配置zabbix_agentd.conf,定义监控脚本key,该配置文件是在215服务器上,配置文件找到下面的位置进行修改

UnsafeUserParameters=1 开启

在脚本中添加定义以下各项的键值

UserParameter=nginx.status[*],/home/scripts/ngx_status.sh $1

 11.重启zabbix agent

systemctl restart zabbix-agent

12.配置服务端,217服务器上。手动测试看能不能访问客户端了215了

zabbix_get -s 192.168.1.215 -k nginx.status[active]

13.配置好之后就是在web端进行配置。大致流程如下

创建主机组—>添加主机—>创建监控模板—>创建应用集—>创建监控项—>创建图形—>创建触发器—>创建事件—>创建处理动作—>创建用户组与用户—>创建告警方式

14.创建主机

15.创建模板

 

16.创建应用集,先找到刚刚创建好的模板

 

 17.创建监控项,也是先找到刚刚创建的模板,如果需要监听多个,就重复创建几次

 

 18.创建图形,还是先找到模板

 

19.为主机添加模板,找到主机点击进去

 

 

 20.之后返回主机那里,就可以看到主机后面的应用集,监控项后面是有数字的了,就说明是关联模板了

21.查看监控数据

23.这个时候查看图形可能会发现没有坐标轴。需要打开zabbix的源代码文件/usr/share/zabbix/include/defines.inc.php,更改为:这个simfang.ttf文件是我直接从window下上传到/usr/share/zabbix/fonts下的

define('ZBX_FONT_NAME', 'simfang');

define('ZBX_GRAPH_FONT_NAME',  'simfang');

再次刷新就能看到坐标轴了

24.将zabbix汉化,我最开始是不能选择中文的,需要做以下修改

 要确定自己服务器是否安装了支持中文,执行locale看看默认的是不是zh_ch

locale

 如果不是需要更改配置,选中zh_CN,记得改了之后要重启服务器

dpkg-reconfigure locales

25.再来配置ubuntu发送邮箱,用来通知。如果nginx挂了,那我们就会收到邮箱

26.安装相应工具,mailutils

apt-get install mailutils

27.安装ssmtp

apt-get install ssmtp

28.更改ssmtp的配置文件,/etc/ssmtp

 29.更改配置文件ssmtp.conf如下,授权码不是邮箱密码,是需要自己去QQ邮箱中开启

#发件人邮箱
root=1053653379@qq.com
#邮件服务器地址(端口必写)
mailhub=smtp.qq.com:465
#发件人邮箱(用于做认证,确保该邮箱所有者允许发邮件)
AuthUser=1053653379@qq.com
#发件人邮箱授权码(用户做上面邮箱的身份验证)
AuthPass=xxxxxx
#配置使用证书
UseTLS=Yes

30.revaliases配置文件需要做如下配置

#格式——主机账号:发件人邮箱:邮件服务器地址(端口必写,若不写则默认端口为25)
root:1053653379@qq.com:smtp.qq.com:465
#表示主机用户root让smtp.qq.com:465这个邮件服务器以ken@qq.com为发件人给其他用户发邮件

31.测试一下是否可以发送了,日志默认是在/var/log/mail.log文件中

echo "邮件正文" | mail -s "邮件主题" Mike@qq.com

32.创建一个触发器,我们是主机是关联到模板上的,所以我们还是在模板上创建一个触发器

 33.创建动作

34.设置邮箱的账号密码主机等,打开

 35.给用户设置邮箱

 36.停掉215上的nginx,看能不能收到短信

 37.如果没有收到邮件,可以通过问题查看,这里会列出原因 

38.如果是要监听mysql是否存活,需要在215上的ngx_status脚本在加一个方法来监听,1:正常

function mysql_ping {
   port=`netstat -nlt | grep 3306|wc -l`
   if [ $port -ne 1 ]; then
		echo 0
   else
		echo 1
   fi;	
}

39.你会发现这里我没有-u   -p  参数,因为如果加上了这个参数会导出返回一个错误,所以我们要先把用户名和密码配置在mysql的配置文件中,我的配置文件是在/etc/mysql/mysql.conf.d/mysqld.conf,在这个配置文件尾加上如下

[client]
user=用户名
host=192.168.1.215
password=密码

40.之后的配置就是和上面是一样的咯

41.新增一个报警媒介类型,发送钉钉消息

获取MESSAGE应该是$argv[2],图上写错了

42.创建发送钉钉消息的脚本文件,先查看脚本文件应该放在哪个目录,打开配置文件

vim /etc/zabbix/zabbix_server.conf

43.找到配置

 44.把脚本放入到alertscripts目录下

#!/usr/bin/php
<?php
header("Content-type: text/html; charset=utf-8");

/**
 * Class DingRobot
 * @package App\Libs
 * 钉钉机器人消息
 */
class DingRobot
{
    private $url = "";
    private $secret = "";


    function __construct()
    {
        
    }

    /**
     * @param array $data
     * $datas = [
            'content'=>[
            'msgtype' => 'text',
            'text' =>["content"=>"@测试,测试消息"
            ]]
            ];
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    function sendDing($data = array())
    {
        // TODO: Implement send_ding() method.
        if(!$data)exit();
        $time = $this->msectime();
        $sign = $this->makeSign($time);
        $url = $this->url.'&timestamp='.$time.'&sign='.$sign;
        //$data = array ('msgtype' => 'text','text' => array ('content' => $msg));
       
		$res = json_decode($this->request_by_curl($url,json_encode($data)),1);
		
        if($res['errcode']!=0){
            
            return false;
        }else{
            
            return true;
        }
    }
	public function request_by_curl($remote_server, $post_string) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $remote_server);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 50);
        curl_setopt($ch, CURLOPT_TIMEOUT, 60);          //单位 秒,也可以使用
        curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Content-Type: application/json;charset=utf-8'));
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        // 线下环境不用开启curl证书验证, 未调通情况可尝试添加该代码
        curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
        $data = curl_exec($ch);
		
        curl_close($ch);
        return $data;
    }
    function makeSign($time){
        $str = $time . "\n" . $this->secret;
        $signStr = base64_encode(hash_hmac('sha256', $str, $this->secret,true));
        $signStr = utf8_encode(urlencode($signStr));
        return $signStr;
    }

    //返回当前的毫秒时间戳
    function msectime()
    {
        $arr = explode(' ',microtime());
        $msec = $arr[0];
        $sec = $arr[1];
        $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
        return $msectime;
    }
}
//$aa = getopt("",["content::"]);
//print_r($content);exit();
$content = $argv[2];
$to = $argv[1];
$obj = new DingRobot();
$data = [
            'msgtype' => 'text',
            'text' =>["content"=>"@".$to.$content],
			'at'=>[
				"atMobiles"=>[
					$to
				],
			"isAtAll"=>false				
			]
        ];
$obj->sendDing($data);



45.给用户配置新告警媒介

46.现在就可以试试关闭nginx,看看有没有钉钉消息 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值