Zabbix agent安装(源码包)

1、创建zabbix用户和组

# groupadd zabbix
# useradd -g zabbix zabbix -s /sbin/nologin

2、安装支持的类库

# yum -y install pcre*    //它是一个用C语言编写的正则表达式函数库

3、解压zabbix源码包并编译安装

# tar -xf zabbix-3.4.8.tar.gz
# cd /opt/zabbix-3.4.8
# ./configure --prefix=/usr/local/zabbix-agent --enable-agent
# make 
# make install

4、拷贝zabbix客户端启动脚本到/etc/init.d目录下

# cp misc/init.d/tru64/zabbix_agentd /etc/init.d/
# chmod +x /etc/init.d/zabbix_agentd

5、修改zabbix_agentd启动脚本

# vim /etc/init.d/zabbix_agentd

1)#!/bin/sh下面添加两行 #使其支持chkconfig配置服务

#chkconfig: 345 95 95
#description: Zabbix_Server

2)将DAEMON启动命令路径修改为安装时指定的路径。

DAEMON=/usr/local/sbin/zabbix_agentd      # 默认脚本启动服务的路径                

修改为:

DAEMON=/usr/local/zabbix-agent/sbin/zabbix_agentd     #安装时指定的路径

# 脚本启动服务的这个路径根据安装时指定的路径来设定;

6、设置zabbix_agentd服务开机启动

# chkconfig --add zabbix_agentd

# systemctl start zabbix_agentd       //启动zabbix
# systemctl status zabbix_agentd

# systemctl enable zabbix_agentd        //设置开机自启

7、编辑zabbix_agent配置文件

# egrep -v "^#|^$" /usr/local/zabbix-agent/etc/zabbix_agentd.conf
LogFile=/var/log/zabbix/zabbix_agentd.log
Server=10.103.1.191
ListenIP=10.103.1.170
ServerActive=10.103.1.191:10051
Hostname=Oracle-10-103-1-170

8、创建日志目录,并设置权限

# mkdir -p /var/log/zabbix

# chmod -R 755 /var/log/zabbix/
# chown -R zabbix. /var/log/zabbix/

# chmod -R 755 /usr/local/zabbix-agent/
# chown -R zabbix. /usr/local/zabbix-agent/

9、启动zabbix_agentd服务

# systemctl restart zabbix_agentd

10、查看zabbix_agentd服务是否启动成功

# netstat -nltp | grep zabbix
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      65870/zabbix_agentd 
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      53020/zabbix_server

到此,zabbix_agend端已安装完成!

Zabbix agent批量自动部署

废话:系统大批量上线时,我们一个个去装agent,有点枯燥,这里分享个expect结合上一篇《zabbix自动发现》,可以省不少工时。

准备工作:

1、下载客户端去吧https://www.zabbix.com/download_agents

2、跑脚本的主机192.168.2.100

1)下载的客户端放在了/opt下面
2)需要安装agent的(ip)和(passwd)信息,放在了ip_list.sh文件中

# vim /opt/ip_list.sh
192.168.2.1:123456
192.168.2.2:123456
192.168.2.3:123456
192.168.2.4:123456
192.168.2.5:123456

3)脚本agent_install.sh也放在了/opt下面

3、注意修改Zabbix Server IP、跑脚本的IP(我标红了)

环境信息:

  • 跑脚本的IP:192.168.2.100
  • Zabbix Server IP:192.168.2.201
  • agent安装路径:/usr/local/zabbix
  • agent日志:/tmp下面
  • 设置了开启启动
#!/bin/bash

# User:zgd
# https://www.zabbix.com/download_agents
# Install_URL:/usr/local/zabbix
# DATE:20180622
# Version:V2.3

rm -rf /root/.ssh/known_hosts
for i in {1..5}
do
 host=`sed -n "${i}p" /opt/ip_list.txt |awk -F ":" '{print $1}'`
 passwd=`sed -n "${i}p" /opt/ip_list.txt |awk -F ":" '{print $2}'`
  expect << EOF
  set timeout 300
  spawn ssh root@$host
  expect "yes/no" { send "yesr" }
  expect "password" { send "${passwd}r" }
  expect "#" { send "groupadd zabbixr" }
  expect "#" { send "useradd -g zabbix zabbix -s /sbin/nologinr" }
  expect "#" { send "mkdir /usr/local/zabbixr" }
  expect "#" { send "scp 192.168.2.100:/opt/zabbix_agents_3.2.0.linux2_6.amd64.tar.gz /usr/local/zabbixr" }
  expect "yes/no" { send "yesr" }
  expect "password" { send "123456r" }
  expect "#" { send  "cd /usr/local/zabbixr" }
  expect "#" { send "tar xf zabbix_agents_3.2.0.linux2_6.amd64.tar.gzr" }
  expect "#" { send "sed -i '91c Server=192.168.2.201' /usr/local/zabbix/conf/zabbix_agentd.confr" }
  expect "#" { send "sed -ri "/^Hostname/s/.*/Hostname=\${HOSTNAME%%.*}/" /usr/local/zabbix/conf/zabbix_agentd.confr" }
  expect "#" { send "/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/conf/zabbix_agentd.confr" }
  expect "#" { send "chmod -R 755 /usr/local/zabbixr" }
  expect "#" { send "chown -R zabbix. /usr/local/zabbixr" }
  expect "#" { send "rm -rf /usr/local/zabbix/zabbix_agents_3.2.0.linux2_6.amd64.tar.gzr" }
  expect "#" { send "echo "/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/conf/zabbix_agentd.conf" >> /etc/rc.localr" }
  expect "#" { send "exitr" }
EOF
done

CentOS 7.x安装搭建Zabbix3.0环境

1、安装数据库mariadb

[root@node1 ~]# yum install -y mariadb mariadb-server
[root@node1 ~]# systemctl start mariadb
[root@node1 ~]# systemctl enable mariadb
[root@node1 ~]# vi /etc/my.cnf
[root@node1 ~]# cat /etc/my.cnf
[mysqld]
character-set-server=utf8
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[root@node1 ~]#

2、下载(Choose your platform for Zabbix server)

https://www.zabbix.com/

未分类

未分类

未分类

3、Install and configure Zabbix server

(1)Install Repository with MySQL database

[root@node1 ~]# rpm -i http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
warning: /var/tmp/rpm-tmp.IcrMTU: Header V4 DSA/SHA1 Signature, key ID 79ea5ed4: NOKEY

(2)Install Zabbix server, frontend, agent

[root@node1 ~]# yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent
...
Installed:
  zabbix-agent.x86_64 0:3.0.16-1.el7          zabbix-server-mysql.x86_64 0:3.0.16-1.el7          zabbix-web-mysql.noarch 0:3.0.16-1.el7         

Dependency Installed:
  OpenIPMI-libs.x86_64 0:2.0.19-15.el7         OpenIPMI-modalias.x86_64 0:2.0.19-15.el7        apr.x86_64 0:1.4.8-3.el7_4.1                     
  apr-util.x86_64 0:1.5.2-6.el7                dejavu-fonts-common.noarch 0:2.33-6.el7         dejavu-sans-fonts.noarch 0:2.33-6.el7            
  fping.x86_64 0:3.10-4.el7                    httpd.x86_64 0:2.4.6-67.el7.centos.6            httpd-tools.x86_64 0:2.4.6-67.el7.centos.6       
  iksemel.x86_64 0:1.4-6.el7                   libXpm.x86_64 0:3.5.12-1.el7                    libtool-ltdl.x86_64 0:2.4.2-22.el7_3             
  libxslt.x86_64 0:1.1.28-5.el7                libzip.x86_64 0:0.10.1-8.el7                    mailcap.noarch 0:2.1.41-2.el7                    
  mariadb-libs.x86_64 1:5.5.56-2.el7           net-snmp-libs.x86_64 1:5.7.2-28.el7_4.1         php.x86_64 0:5.4.16-43.el7_4.1                   
  php-bcmath.x86_64 0:5.4.16-43.el7_4.1        php-cli.x86_64 0:5.4.16-43.el7_4.1              php-common.x86_64 0:5.4.16-43.el7_4.1            
  php-gd.x86_64 0:5.4.16-43.el7_4.1            php-ldap.x86_64 0:5.4.16-43.el7_4.1             php-mbstring.x86_64 0:5.4.16-43.el7_4.1          
  php-mysql.x86_64 0:5.4.16-43.el7_4.1         php-pdo.x86_64 0:5.4.16-43.el7_4.1              php-xml.x86_64 0:5.4.16-43.el7_4.1               
  t1lib.x86_64 0:5.1.2-14.el7                  unixODBC.x86_64 0:2.3.1-11.el7                  zabbix-web.noarch 0:3.0.16-1.el7                 

Complete!
[root@node1 ~]#

(3)Create initial database

[root@node1 ~]# mysql -uroot -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 2
Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit
Bye
[root@node1 ~]# 

Import initial schema and data. You will be prompted to enter your newly created password.

[root@node1 ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
Enter password: 
[root@node1 ~]# mysql -uzabbix -pzabbix
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 6
Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| zabbix             |
+--------------------+
2 rows in set (0.01 sec)

MariaDB [(none)]> use 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

MariaDB [zabbix]> 

(4)Configure the database for Zabbix server

[root@node1 ~]# vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

(5)Configure PHP for Zabbix frontend

[root@node1 ~]# vi /etc/php.ini
max_execution_time = 600
max_input_time = 600
memory_limit = 256M
post_max_size = 32M
upload_max_filesize = 16M
date.timezone = Asia/Shanghai

(6)Start Zabbix server and agent processes

[root@node1 ~]# systemctl restart zabbix-server zabbix-agent httpd
[root@node1 ~]# systemctl enable zabbix-server zabbix-agent httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/system/zabbix-server.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@node1 ~]# 

4、Configure Zabbix frontend

未分类

https://www.zabbix.com/documentation/3.0/manual/installation/install#installing_frontend

http://node1/zabbix/

未分类

未分类

未分类

未分类

未分类

未分类

未分类

未分类

zabbix 监控 Resin

一、环境介绍

服务器信息:
zabbix-server:172.16.4.6
zabbix-java-gateway:172.16.0.7
Resin:172.16.0.6

软件环境:
 zabbix版本:Zabbix server v2.4.6
 zabbix-java-gateway:zabbix-java-gateway-2.4.6-1.el6.x86_64.rpm
 测试jar:cmdline-jmxclient-0.10.3.jar

二、安装zabbix

zabbix安装可以参考zabbix官网介绍,这里就不在详细说明了,参考如下网址:

https://www.zabbix.com/documentation/2.4/manual/installation/install_from_packages

zabbix-java-gateway下载地址:

http://www.zabbix.com/download.php

zabbix-java-gateway官网安装介绍:

https://www.zabbix.com/documentation/2.4/ru/manual/concepts/java?s[]=java

测试jar下载地址:(需要翻。。。)

http://crawler.archive.org/cmdline-jmxclient/cmdline-jmxclient-0.10.3.jar

三、安装zabbix-java-gateway网关

安装

# rpm -ihv zabbix-java-gateway-2.4.6-1.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:zabbix-java-gateway    ########################################### [100%]

修改配置文件:

# grep  -Ev "(^#|^$)" /etc/zabbix/zabbix_java_gateway.conf 
LISTEN_IP="172.16.0.7"   \zabbix-java-gateway 网关监听地址
LISTEN_PORT=10052        \zabbix-java-gateway  网关监听端口
PID_FILE="/var/run/zabbix/zabbix_java.pid" \zabbix-java-gateway 的pid文件路径
START_POLLERS=5    \启动5个线程
TIMEOUT=10        \超时时长

启动zabbix-java-gateway网关

# /etc/init.d/zabbix-java-gateway start

检查zabbix-java-gateway网关是否启动成功

# netstat -tpln | grep 10052
tcp        0      0 172.16.0.7:10052            0.0.0.0:*                   LISTEN      6976/java

四、配置Resin,启用JMX

在Resin家目录下的conf/目录中,修改resin.conf配置文件,添加一下信息:

可以参考官网介绍:http://caucho.com/resin-4.0/admin/advanced-jmx.xtp

      <jvm-arg>-Dcom.sun.management.jmxremote</jvm-arg>
      <jvm-arg>-Dcom.sun.management.jmxremote.port=12345</jvm-arg>
      <jvm-arg>-Dcom.sun.management.jmxremote.ssl=false</jvm-arg>
      <jvm-arg>-Dcom.sun.management.jmxremote.authenticate=false</jvm-arg>
      <jvm-arg>-Djava.rmi.server.hostname=172.16.0.6</jvm-arg> \此项可选

在resin中添加完Resin后,重启启动resin

# /etc/init.d/resin stop
# /etc/init.d/resin start

在zabbix-server端启用zabbix-java-gateway选项:

# grep -Ev "(^#|^$)" /etc/zabbix/zabbix_server.conf | grep -i java
JavaGateway=172.16.0.7 \zabbix-java-gateway的地址
JavaGatewayPort=10052   \zabbix-java-gateway的端口号
StartJavaPollers=5       \启动5个线程

五、在zabbix-java-gateway服务器上,利用cmdline-jmxclient-0.10.3.jar获取resin服务器的key

获取key

# java -jar cmdline-jmxclient-0.10.3.jar  - 172.16.0.6:12345 | sort
com.alibaba.druid:id=1924372698,type=DruidDataSource
com.alibaba.druid:type=DruidDataSourceStat
com.alibaba.druid:type=DruidDriver
com.alibaba.druid:type=DruidStatService
com.alibaba.druid:type=MockDriver
com.sun.management:type=HotSpotDiagnostic
java.lang:name=CMS Old Gen,type=MemoryPool
java.lang:name=CMS Perm Gen,type=MemoryPool
java.lang:name=CodeCacheManager,type=MemoryManager
java.lang:name=Code Cache,type=MemoryPool
java.lang:name=ConcurrentMarkSweep,type=GarbageCollector
java.lang:name=Par Eden Space,type=MemoryPool
java.lang:name=ParNew,type=GarbageCollector
java.lang:name=Par Survivor Space,type=MemoryPool
java.lang:type=ClassLoading
java.lang:type=Compilation
java.lang:type=Memory
java.lang:type=OperatingSystem
java.lang:type=Runtime
java.lang:type=Threading
java.util.logging:type=Logging
JMImplementation:type=MBeanServerDelegate
resin:Host=www.magedu.com,name=deploy,type=EarDeploy
resin:Host=www.magedu.com,name=deploy,type=ResourceDeploy
resin:Host=www.magedu.com,name=/resin-doc,type=WebApp
resin:Host=www.magedu.com,name=/solr,type=WebApp
resin:Host=www.magedu.com,name=/,type=WebApp
resin:Host=www.magedu.com,name=webapps,type=WebAppDeploy
resin:Host=www.magedu.com,WebApp=/,name=/data/web/www.magedu.com/WEB-INF/rewrite.xml,type=RewriteImport
resin:Host=www.magedu.com,WebApp=/resin-doc,name=jdbc/resin,type=ConnectionPool
resin:Host=www.magedu.com,WebApp=/resin-doc,name=jdbc/resin,type=JdbcDriver
resin:Host=www.magedu.com,WebApp=/resin-doc,name=/resin-doc/examples/amber-basic-field,type=WebApp
resin:Host=www.magedu.com,WebApp=/resin-doc,name=/resin-doc/examples/amber-basic,type=WebApp
resin:Host=www.magedu.com,WebApp=/resin-doc,name=/resin-doc/examples/amber-create,type=WebApp
resin:Host=www.magedu.com,WebApp=/resin-doc,name=/resin-doc/examples/amber-inherit,type=WebApp
resin:Host=www.magedu.com,WebApp=/resin-doc,name=/resin-doc/examples/amber-many2many,type=WebApp
resin:Host=www.magedu.com,WebApp=/resin-doc,name=/resin-doc/examples/amber-many2one,type=WebApp
resin:Host=www.magedu.com,WebApp=/resin-doc,name=/resin-doc/examples/amber-one2many,type=WebApp
resin:Host=www.magedu.com,WebApp=/resin-doc,name=/resin-doc/examples/amber-query,type=WebApp
resin:Host=www.magedu.com,WebApp=/resin-doc,name=/resin-doc/examples/amber-session,type=WebApp
。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。\此处省略一些信息
resin:name=127.0.0.1-6800,type=Port
resin:name=app-tier,type=Cluster
resin:name=hosts,type=HostDeploy
resin:name=INADDR_ANY-8002,type=Port
resin:name=www.magedu.com,type=Host
resin:type=BlockManager
resin:type=PersistentStore
resin:type=ProxyCache
resin:type=Resin
resin:type=Server
resin:type=ThreadPool

获取value

# java -jar cmdline-jmxclient-0.10.3.jar  - 172.16.0.6:12345  "resin:type=ThreadPool" \利用此key可以获取此key中的多个属性,然后利用属性获取值
Attributes:
 Name: The name property of the JMX ObjectName (type=java.lang.String)
 ObjectName: The JMX ObjectName for the MBean (type=javax.management.ObjectName)
 ThreadActiveCount: The current number of active threads (type=int)
 ThreadCount: The current number of managed threads (type=int)
 ThreadIdleCount: The current number of idle threads (type=int)
 ThreadIdleMax: The configured maximum number of idle threads (type=int)
 ThreadIdleMin: The configured minimum number of idle threads (type=int)
 ThreadMax: The configured maximum number of threads (type=int)
 Type: The type property of the JMX ObjectName (type=java.lang.String)
# java -jar cmdline-jmxclient-0.10.3.jar  - 172.16.0.6:12345  "resin:type=ThreadPool"  ThreadMax  \利用"resin:type=ThreadPool" 获取ThreadMax的值
04/01/2016 18:29:58 +0800 org.archive.jmx.Client ThreadMax: 15000

六、作为zabbix使用的key、value都获取到以后,我们接下来制作zabbix模板

创建一个名为Resin的模板

未分类

添加Applications;以下是我自己添加的;大家可以根据自己的需求添加:

未分类

添加完Applications以后,在添加item,在这里以MemoryPool_Eden为例,添加item

未分类

添加完item以后,在添加图形;以下是我自己添加的绘图信息:

未分类

到此模板制作完成,现在开始在主机中关联模板:

未分类

添加完后,可以看到此主机的JMX变为绿色:

未分类

到此我们可以静心心来,查看绘制的图形信息了

未分类

到此,监控已经完成,如有做的不好的地方,请大家帮忙指正,O(∩_∩)O谢谢

Centos-7安装zabbix

本例环境使用Centos7.3 64位

安装zabbix需要mysql的支持,下面是快速安装LNMP的方法(使用EZHTTP安装)

安装LNMP

首先创建一个目录存放下载文件:

[root@localhost ~]# mkdir /software
[root@localhost software]# cd /software/

安装wget工具:

[root@localhost software]# yum -y install wget

下载EZHTTP安装脚本:

[root@localhost software]# wget --no-check-certificate https://github.com/centos-bz/ezhttp/archive/master.zip?time=$(date +%s) -O ezhttp.zip

启动脚本:

[root@localhost software]# unzip ezhttp.zip
[root@localhost software]# cd ezhttp-master
[root@localhost ezhttp-master]# chmod +x start.sh
[root@localhost ezhttp-master]# ./start.sh

进去选择页面

除了数字选择项需要确认输入,其他的的按回车默认就行:

nginx 和 apache 都行,个人比较喜欢nginx
php版本5.5-7.1
mysql版本5.6

[root@localhost ezhttp-master]# ./start.sh
#############################################################################

You are welcome to use this script to deploy your linux,hope you like.
The script is written by Zhu Maohai.
If you have any question.
please visit http://devops.webres.wang/ezhttp/ and submit your issue.thank you.

############################################################################

1) LAMP LNMP LANMP Installation.
2) Some Useful Tools.
3) Upgrade Software
4) Exit.

please select: 1
you select LAMP LNMP LANMP Installation.
1) LNMP(Nginx MySQL PHP)
2) LAMP(Apache MySQL PHP)
3) LNAMP(Nginx Apache MySQL PHP)
4) back to main menu

please input the package you like to install: 1
#################### nginx setting ####################


1) nginx-1.8.0
2) tengine-2.1.0
3) openresty-1.9.7.3
4) custom_version
5) do_not_install

which nginx you do select(default do_not_install): 1
your selection: nginx-1.8.0
nginx-1.8.0 install location(default:/usr/local/nginx,leave blank for default): 
nginx-1.8.0 install location: /usr/local/nginx
the nginx-1.8.0 configure parameter is:
--prefix=/usr/local/nginx --with-http_ssl_module --with-openssl=/software/ezhttp-master/soft/openssl-1.0.2h  --with-http_sub_module --with-http_stub_status_module --with-pcre --with-pcre=/software/ezhttp-master/soft/pcre-8.33 --with-zlib=/software/ezhttp-master/soft/zlib-1.2.8 --with-http_secure_link_module


Would you like to change it?[N/y](default n): 
you select no,configure parameter will not be changed.

Do you need to install nginx module?[N/y](default n): 
#################### mysql setting ####################


1) mysql-5.1.73
2) mysql-5.5.54
3) mysql-5.6.35
4) mysql-5.7.17 (need about 2GB RAM when building,try mysql-5.6 if failed)
5) libmysqlclient18
6) custom_version
7) do_not_install

which mysql you'd select(default do_not_install): 3
your selection: mysql-5.6.35
mysql-5.6.35 install location(default:/usr/local/mysql,leave blank for default): 
mysql-5.6.35 install location: /usr/local/mysql
mysql data location(default:/usr/local/mysql/data,leave blank for default): 
mysql-5.6.35 data location: /usr/local/mysql/data
mysql port number(default:3306,leave blank for default): 
mysql port number: 3306
mysql server root password (default:root,leave blank for default): 123456
mysql-5.6.35 root password: 123456
the mysql-5.6.35 configure parameter is:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/usr/local/mysql/etc -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=complex -DENABLED_LOCAL_INFILE=1 


Would you like to change it?[N/y](default n): 
you select no,configure parameter will not be changed.
#################### php setting ####################


1) php-5.2.17
2) php-5.3.29
3) php-5.4.43
4) php-5.5.27
5) php-5.6.15
6) php-7.1.0
7) custom_version
8) do_not_install

which php you'd select(default do_not_install): 6
your selection: php-7.1.0
php-7.1.0 install location(default:/usr/local/php,leave blank for default): 
php-7.1.0 install location: /usr/local/php
the php-7.1.0 configure parameter is:
--prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --enable-bcmath=shared --with-pdo_sqlite --with-gettext=shared --with-iconv --enable-ftp=shared --with-sqlite --with-sqlite3 --enable-mbstring=shared --enable-sockets=shared --enable-zip --enable-soap=shared --with-openssl --with-zlib --with-curl=shared --with-gd=shared --with-jpeg-dir --with-png-dir --with-freetype-dir --with-mcrypt=shared,/opt/ezhttp/libmcrypt-2.5.8 --with-mhash=shared,/opt/ezhttp/mhash-0.9.9.9 --enable-opcache --with-mysql=mysqlnd --with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd --without-pear --with-libdir=lib64 --disable-fileinfo


Would you like to change it?[N/y](default n): 
you select no,configure parameter will not be changed.
#################### PHP modules install ####################
php-7.1.0 version available modules:

#################### php_modules install ####################

1) fileinfo
2) php-gmp
3) php-swoole-1.7.20
4) do_not_install

please input one or more number between 1 and 4(default do_not_install)(ie.1 2 3): 
your selection do_not_install
#################### other_soft install ####################

1) memcached-1.4.24
2) pure-ftpd-1.0.41
3) phpMyAdmin-4.4.12-all-languages
4) redis-3.0.3
5) mongodb-linux-x86_64-2.4.9
6) phpRedisAdmin-1.1.0
7) memadmin-1.0.12
8) rockmongo-1.1.6-fix-auth
9) jdk1.7.0_79
10) jdk1.8.0_66
11) apache-tomcat-7.0.68
12) apache-tomcat-8.0.39
13) do_not_install

please input one or more number between 1 and 13(default do_not_install)(ie.1 2 3): 1 2 3 4 6 10 12
your selection memcached-1.4.24 pure-ftpd-1.0.41 phpMyAdmin-4.4.12-all-languages redis-3.0.3 phpRedisAdmin-1.1.0 jdk1.8.0_66 apache-tomcat-8.0.39
input memcached-1.4.24 location(default:/usr/local/memcached): 
memcached location: /usr/local/memcached
input pure-ftpd-1.0.41 location(default:/usr/local/pureftpd): 
pureftpd location: /usr/local/pureftpd
Would you like to install web user manager for pureftpd?[N/y](default n): 
you select not install web manager
input phpMyAdmin-4.4.12-all-languages location(default:/home/wwwroot/phpmyadmin): 
phpmyadmin location: /home/wwwroot/phpmyadmin
input redis-3.0.3 location(default:/usr/local/redis): 
redis location: /usr/local/redis
please input the max memory allowed for redis(ie.128M,512m,2G,4g): 128M
128M
input phpRedisAdmin-1.1.0 location(default:/home/wwwroot/redisadmin): 
phpRedisAdmin location: /home/wwwroot/redisadmin
input jdk1.8.0_66 location(default:/usr/local/jdk1.8.0_66): 
jdk8 location: /usr/local/jdk1.8.0_66
input apache-tomcat-8.0.39 location(default:/usr/local/tomcat8): 
tomcat8 location: /usr/local/tomcat8
#################### your choice overview ####################

Package: lnmp

*****Nginx Setting*****
Nginx: nginx-1.8.0
Nginx Location: /usr/local/nginx
Nginx Configure Parameter: --prefix=/usr/local/nginx --with-http_ssl_module --with-openssl=/software/ezhttp-master/soft/openssl-1.0.2h  --with-http_sub_module --with-http_stub_status_module --with-pcre --with-pcre=/software/ezhttp-master/soft/pcre-8.33 --with-zlib=/software/ezhttp-master/soft/zlib-1.2.8 --with-http_secure_link_module
Nginx Modules: 


*****MySQL Setting*****
MySQL Server: mysql-5.6.35
MySQL Location: /usr/local/mysql
MySQL Data Location: /usr/local/mysql/data
MySQL Port Number: 3306
MySQL Root Password: 123456
MySQL Configure Parameter: -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/usr/local/mysql/etc -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=complex -DENABLED_LOCAL_INFILE=1 

*****PHP Setting*****
PHP: php-7.1.0
PHP Location: /usr/local/php
PHP Configure Parameter: --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --enable-bcmath=shared --with-pdo_sqlite --with-gettext=shared --with-iconv --enable-ftp=shared --with-sqlite --with-sqlite3 --enable-mbstring=shared --enable-sockets=shared --enable-zip --enable-soap=shared --with-openssl --with-zlib --with-curl=shared --with-gd=shared --with-jpeg-dir --with-png-dir --with-freetype-dir --with-mcrypt=shared,/opt/ezhttp/libmcrypt-2.5.8 --with-mhash=shared,/opt/ezhttp/mhash-0.9.9.9 --enable-opcache --with-mysql=mysqlnd --with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd --without-pear --with-libdir=lib64 --disable-fileinfo

*****Other Software Setting*****
Other Software:  memcached-1.4.24 pure-ftpd-1.0.41 phpMyAdmin-4.4.12-all-languages redis-3.0.3 phpRedisAdmin-1.1.0 jdk1.8.0_66 apache-tomcat-8.0.39
memcached location: /usr/local/memcached
pureftpd location: /usr/local/pureftpd
phpmyadmin_location: /home/wwwroot/phpmyadmin
redis_location: /usr/local/redis
phpRedisAdmin_location: /home/wwwroot/redisadmin
jdk8_location: /usr/local/jdk1.8.0_66
tomcat8_location: /usr/local/tomcat8
JAVA_HOME: /usr/local/jdk1.8.0_66

##############################################################

Are you ready to configure your Linux?[Y/n](default y):

安装过程等待即可:

..............................
..............................

安装成功:

start programs...
Starting nginx daemon: .
Starting MySQL.. SUCCESS! 
Warning: Using a password on the command line interface can be insecure.
Starting php-fpm  done
Starting memcached: 
Start pureftpd....  [OK] 
Starting Redis server...

使用EZHTTP安装成功后各服务已经打开,输入Linxu 机器IP 访问即可:

未分类

恭喜,安装成功了!

开始安装zabbix

配置源

Zabbix在CentOS基本源里不可获得,因此必须配置EPEL 和Zabbix 官方repository,因为需要一款名叫fping的软件(这款软件你下载源码编译安装貌似行不通!),然后其他的yum源将mysql全部识别为mariadb了,所以想yum安装mysql,请安装mysql社区版官方源,或者编译安装,上面的EZHTTP安装脚本就是编译安装

安装EPEL repository

[root@localhost software]# pwd
/software
[root@localhost software]# yum -y install epel-release

配置ZabbixZone package repository and GPG key

[root@localhost software]# rpm --import http://repo.zabbix.com/RPM-GPG-KEY-ZABBIX
[root@localhost software]# rpm --import http://repo.zabbix.com/RPM-GPG-KEY-ZABBIX-A14FE591
[root@localhost software]# yum -y install fping
[root@localhost software]# rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm

安装Zabbix server and agent(agent是可选的)

安装Zabbix server and agent:(配置自己监控自己,所以安装了zabbix-agent)

yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent

可以上zabbix rpm包官网查看或下载相应包

http://repo.zabbix.com/

创建MySQL 数据库和用户

登录Mysql:

[root@localhost software]# mysql -uroot -p123456

创建一个数据库zabbix和数据库用户zabbix:

mysql> create database zabbix character set utf8;

mysql> grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by 'zabbix';

mysql> flush privileges;

数据库导入zabbix template

看yum安装的zabbix-server-mysql-3.x.x 这个文件的版本是多少就改成多少

[root@localhost software]# zcat /usr/share/doc/zabbix-server-mysql-3.2.4/create.sql.gz |mysql -uzabbix -pzabbix -b zabbix

配置Zabbix server

vi /etc/zabbix/zabbix_server.conf

配置下面的几个参数
带#号的就去掉#号,并修改其值

ListenPort=10051
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
DBSocket=/usr/local/mysql/data/mysql.sock
DBPort=3306

配置zabbix-agent

vi /etc/zabbix/zabbix_agentd.conf

配置zabbix server的ip

## Line 95 - Specify Zabbix server ##

Server=127.0.0.1

## Line 136 - Specify Zabbix server ##

ServerActive=127.0.0.1

## Line 147 - Specify Zabbix server Hostname or IP address

Hostname=127.0.0.1

修改PHP 设置

修改php.ini为zabbix 建议的设置
编辑文件 php.ini,

[root@localhost software]# vi /usr/local/php/etc/php.ini

设置下面的参数:

max_execution_time = 300

max_input_time = 300

memory_limit = 128M

post_max_size = 32M

upload_max_filesize = 2M

date.timezone = Asia/Shanghai

安装时可能缺少下面扩展,把下面内容添加到php.ini

extension=bcmath.so
extension=gettext.so
extension=sockets.so

安装扩展

[root@localhost ext]# cd /software/ezhttp-master/soft/php-7.1.0/ext
[root@localhost ext]# pwd
/software/ezhttp-master/soft/php-7.1.0/ext
[root@localhost ext]# cd sockets/
[root@localhost sockets]# /usr/local/php/bin/phpize
[root@localhost sockets]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@localhost sockets]# cd ..
[root@localhost ext]# cd bcmath/
[root@localhost bcmath]# /usr/local/php/bin/phpize
[root@localhost bcmath]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@localhost bcmath]# cd ..
[root@localhost ext]# cd gettext/
[root@localhost gettext]# /usr/local/php/bin/phpize
[root@localhost gettext]# ./configure --with-php-config=/usr/local/php/bin/php-config

使用下面命令可以看到有一个扩展存放的目录,我们需要的扩展模块在其中即安装成功

[root@localhost gettext]# make && make install

修改php-fpm运行的用户和组

[root@localhost software]# vi /usr/local/php/etc/php-fpm.d/www.conf
user = www
group = www

方法一:使用 apache 服务器

apache配置zabbix-web站点文件

[root@localhost etc]# cd /etc/httpd/

vi conf/httpd.conf
修改下面内容:

Listen 80

User www
Group wwww

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

vi conf.d/zabbix.conf
修改内容如下:

<IfModule mod_php5.c>
    php_value max_execution_time 300
    php_value memory_limit 128M
    php_value post_max_size 32M
    php_value upload_max_filesize 8M
    php_value max_input_time 300
    php_value always_populate_raw_post_data -1
    php_value date.timezone Asia/Shanghai
</IfModule>

然后重启apache、mysql、php、zabbix-server
浏览器输入ip/setup.php 即可进入zabbix初次web安装界面

方法二:使用 Nginx 服务器

配置zabbix-web站点文件

把zabbix程序文件拷贝到我们指定的目录,并修改属主和属组

[root@localhost software]# cp -r /usr/share/zabbix /var/www/
[root@localhost software]# chown -R www:www /var/www/zabbix
[root@localhost software]# chown -R www:www /etc/zabbix
[root@localhost software]# chown -R www:www /usr/share/zabbix
[root@localhost software]# chown -R www:www /usr/lib/zabbix
[root@localhost software]# chmod -R 755 /etc/zabbix/web

创建存放web站点配置文件的目录

[root@localhost ~]# cd /usr/local/nginx/conf/
[root@localhost conf]# mkdir conf.d/

配置nginx.conf,把新建的目录包含进去

[root@localhost conf]# vi nginx.conf

listen 80 default_server;      ===> 改为 listen 90 default_server;
root /home/wwwroot/;      ===> 改为 # root /home/wwwroot/;
include vhost/*.conf;    ===> 改为 include /usr/local/nginx/conf/conf.d/*.conf;

配置zabbix.conf(zabiix站点的配置文件)

[root@localhost conf]# cd conf.d/
[root@localhost conf.d]# vi zabbix.conf

zabbix.conf 内容如下:

    server {
        listen 80;
        server_name localhost;
        root /var/www/zabbix;
        index index.php index.html index.htm;
        access_log  logs/zabbix.access.log;
        error_log   logs/zabbix.error.log;

        location / {
            try_files $uri $uri/ /index.php?$args;
        }

        location ~ .*.(php)?$ {
            expires -1s;
            try_files $uri =404;
            fastcgi_split_path_info ^(.+.php)(/.+)$;
            include        fastcgi_params;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  PHP_VALUE        open_basedir=$document_root:/tmp/:/proc/:/usr/share/zabbix/:/etc/zabbix/web/:/etc/zabbix/;
        }

    }

启动zabbix 和 各服务

启动zabbix-server 和zabbix-agent。并设置zabbix-server和zabbix-agent开机自动启动

systemctl start zabbix-server

systemctl start zabbix-agent

/etc/init.d/nginx restart

chkconfig nginx on

/etc/init.d/mysqld restart

chkconfig mysqld on

/etc/init.d/php-fpm restart

chkconfig php-fpm on

systemctl enable zabbix-server

systemctl enable zabbix-agent

修改Firewall 和SELinux 设置

开放zabbix端口10050 and 10051

firewall-cmd --permanent --add-port=10050/tcp

firewall-cmd --permanent --add-port=10051/tcp

重启firewall

systemctl restart firewalld

如果使用 SELinux, 运行以下命令使 Apache 可以和 Zabbix通信

setsebool -P httpd_can_connect_zabbix=1

如果是测试环境可以直接关闭防火墙和selinux

[root@localhost software]# systemctl stop firewalld
[root@localhost local]# chkconfig firewalld off

修改配置文件,禁用selinux

[root@localhost software]# setenforce 0
[root@localhost software]# vi /etc/selinux/config

SELINUX=disabled

输入ip/setup.php进入zabbix-web界面进行后续安装操作

未分类

确认状态都是ok

未分类

配置数据库信息(填写上面我们设置的数据库账户和密码:zabbix,zabbix,测试环境可以直接用root)

未分类

进入下一步,默认即可

未分类

如果出现下面错误

未分类

解决方法:

sed -i 's#cgi.fix_pathinfo=0#cgi.fix_pathinfo=1#' /usr/local/php/etc/php.ini
/etc/init.d/php-fpm restart

刷新浏览器, 一直下一步

登录,默认用户名: Admin , 默认密码:zabbix

未分类

使用php7.0版本初始化完成后页面有如下的报错:

未分类

这个是因为PHP 7.1.0类型强化,处理方法也很简单找到Zabbix WEB目录下include/func.inc.php文件,执行下面命令,并重启php服务:

sed -i ‘/$last = strtolower(substr($val, -1));/a$val = substr($val,0,-1);’ /var/www/zabbix/include/func.inc.php
/etc/init.d/php-fpm reload
然后刷新页面可以看到已经正常。

ok,初始化完毕。。。

解决图形中文乱码

未分类

这个问题是由于zabbix的web端没有中文字库,我们最需要把中文字库加上即可
解决办法如下
1.从windows下控制面板->字体->选择一种中文字库例如“楷体”

未分类

2.把它拷贝到zabbix的web端的fonts目录下例如:/var/www/html/zabbix/fonts,确认后缀为ttf

未分类

3.修改zabbix的web端/include/defines.inc.php
点击(此处)折叠或打开

//define('ZBX_FONT_NAME', 'graphfont');
define('ZBX_FONT_NAME', 'simkai');

//define('ZBX_GRAPH_FONT_NAME',     'graphfont'); // font file name
define('ZBX_GRAPH_FONT_NAME',       'simkai'); // font file name

其中simkai为字库名字,不包含ttf后缀
测试结果:

未分类

Zabbix通过SNMPv2监控DELL服务器的硬件信息

(一)zabbix监控DELL服务器

(1)简述

监控DELL服务器硬件一般有两种途径:

1、操作系统上安装OMSA,编写脚本调用omreport命令进行监控(需要在操作系统上安装比较麻烦);
2、使用iDRAC(Integrated Dell Remote Access Controller,是一款dell专门用于远程访问控制接口),可以不用在操作系统上安装OMSA,只需要在iDRAC上开启SNMP,zabbix通过SNMP进行监控。对于不支持OMSA的操作系统和要求不能安装额外软件的情况下,推荐使用SNMP监控,配置简单方便(推荐使用)。

(2)步骤

1、登陆iDRAC,直接在浏览器输入访问的ip即可

未分类

2、通过iDRAC开启snmp服务:iDRAC设置—>网络—>服务—>snmp代理,启用snmp并设置团体名(community),不推荐使用默认的public。建议所有服务器设置统一的团体名。

未分类

3、在zabbix_server或代理端通过snmpwalk(snmpwalk -v 2c -c public IP)查看是否能获取到数据。如果获取不到数据,查看失败的原因。

未分类

4、在zabbix官网下下载改监控的相应的模板(https://share.zabbix.com/cat-server-hardware/dell/dell-idrac-chinese) https://share.zabbix.com/
其他的模板都可以在这进行下载

未分类

5、把下载的模板导入到zabbix_server中。配置—>模板—>选择文件—>导入

未分类

6、添加监控服务器。配置—>主机—>创建主机,填写相关信息。

未分类

未分类

未分类

7、修改收集数据的时间,查看获取的数据

未分类

未分类

最后可以查看下监控项看是否有不支持的,不支持的查看原因进行优化。

实现Zabbix通过邮件发送图形报表

在使用Zabbix的过程中,我们通常会建立一些需要图形报表来汇总需要监控的Graph。
而下面的两个脚本,则是通过从Zabbix数据库中获取所有的图形数据,提供Zabbix的WEB接口将所有图形保存到本地,然后通过脚本以Email形式发送过来,作为每天的自动报表。

在本地创建/data/cscript 和 /data/graph 目录

save_graph.pl

#!/usr/bin/perl
use File::Path;
use DBI;
use Net::FTP;
#
#定义graph路径,判断graph目录是否存在,不存在则自动新建
my $path = '/data/graph';
if(-e $path) { rmtree($path); }
mkdir($path);
#
my $stime = `date +%Y%m%d`; chop($stime); $stime .= '1000';
if( length($stime) != 12 ) { print "Error get date"; exit; }
#
#指定截图图形的时间轴周期
my $period = 21600;    # 6 hours
#
#定义Web的登陆名及密码
my $login = 'admin';   # Zabbix Web User
my $pass = 'password'; # Zabbix Web User Password, must be URL Encoded
#
#定义FTP账号密码
my $ftp_site = 'ftp.corp.intra';
my $ftp_user_name = 'zabbix';
my $ftp_password = 'zabbix';
#
#定义cookie的路径
my $cook = "/tmp/cookie";
#
#指定链接数据库
my $dsn = 'DBI:mysql:zabbix:localhost'; # Connect MySQL DB "zabbix" on localhost
my $db_user_name = 'zabbix'; # MySQL DB user
my $db_password = 'dbpassword'; # MySQL DB user password
my $dbh = DBI->connect($dsn, $db_user_name, $db_password);
#
#查询存在哪些screen
my $sth = $dbh->prepare(qq{select a.name,a.hsize,a.vsize, b.resourceid, b.width, b.height,b.x,b.y from screens a,screens_items as b where a.screenid=b.screenid and a.templateid<=>NULL order by a.name});
$sth->execute();
my %screens;
#
# Get all graphs by using curl
while (my ($name,$hsize,$vsize, $id,$width,$height,$x,$y) = $sth->fetchrow_array())
{
#
#长度大于2位的是graph,小于2位的表示是MAP
if(length($id) > 2)
{
#print "$id => $idsn";
#
#定义导出的文件路径及文件名
my $p = "$path/$name.$hsize.$vsize.$y.$x.$id.png";
#
#获取cookie,免除访问实际数据时需要认证
my $strcomm  = `curl  -D $cook -b $cook -d "request=&name=$login&password=$pass&autologin=1&enter=Sign+in"  localhost/zabbix/index.php`;
#
#获取图形文件
$strcomm  = `curl  -b $cook -F  "graphid=$id" -F "period=$period" -F "stime=$stime" -F "width=$width" -F "height=$height" localhost/zabbix/chart2.php > $p`;
}
#
#否则,小于2位的表示是MAP
else {
my $p = "$path/map.$name.$id.png";
my $strcomm  = `curl  -b $cook -F  "sysmapid=$id" localhost/zabbix/map.php > $p`;

#
#ftp到服务器上
my $ftp = Net::FTP->new
(
$FTP_Site,
Timeout => 30
) or die "could not connect.n";
$ftp->login($ftp_user_name,$ftp_password) or die "Could not login.n";
$ftp->binary,$ftp->message;
#$remotefile = "Lync.png";
#$localfile = "$path/$p";
$ftp->put($p) or die "put $remotefile fail.n",$ftp->message;
$ftp->quit;
}
}
exit ;

email-pic.py

#! /usr/bin/env python
import os
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
# 定义函数 _sendmail
def _sendmail(smtp_server,port,account,password,str_from,list_to,msg):
    smtp = smtplib.SMTP(smtp_server,port)
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo()
#    smtp.login(account, password)
    smtp.sendmail(str_from, list_to,msg)
    smtp.close()

# 定义函数 _get_pictures
def _get_pictures(image_dir):
#建立空列表Pictures
    pictures = []
#os.listdir 返回指定目录下的所有文件和目录名
    for f in os.listdir(image_dir):
# append 是在列表最后增加内容,这里是将list出来的信息f增加到Picture列表中
        pictures.append(f)
    return pictures
# 定义函数 _create_msg
def _create_msg(screen_name,screens,image_dir,str_from,list_to):
    msgRoot = MIMEMultipart('related')

# 定义邮件主题
    msgRoot['Subject'] = 'Zabbix Screen Report: %s' % screen_name

#定义发件人、收件人
    msgRoot['From'] = str_from
    msgRoot['To'] = ",".join(list_to)
    msgRoot.preamble = 'This is a multi-part message in MIME format.'
    # Encapsulate the plain and HTML versions of the message body in an
    # 'alternative' part, so message agents can decide which they want to display.
    msgAlternative = MIMEMultipart('alternative')
    msgRoot.attach(msgAlternative)
# 定义邮件正文内容
    msgText = MIMEText('This is the alternative plain text message.')
    msgAlternative.attach(msgText)
    contents = ""
# tuple 元组 定义hsize,vsize变量  
    contents += "<h1>Screen %s</h1><br>" % screen_name
    _,hsize,vsize,_,_,_,_,= tuple(screens[0].split('.'))

    contents +="<table>"

# sorted()是产生一个新的列表并排序   
    screens = sorted(screens)
    y= -1
    for f in screens:
# 将文件名以为.分割点
        items = f.split('.')

# 原文件名格式:$path/$name.$hsize.$vsize.$y.$x.$id.png
# 经过切片后取 image_Y,Image_x,image_ID
        # tuple 元组
        _,_,_,image_y,image_x,image_id,_ = tuple(items)
        #定义邮件中的图片文件名:image-screen_name-image_id
        image_name = "image-%s-%s" % (screen_name, image_id)
        #fp = open("test.txt",w)     直接打开一个文件,如果文件不存在则创建文件
        #关于open 模式:
        #w     以写方式打开,
        #a     以追加模式打开 (从 EOF 开始, 必要时创建新文件)
        #r+     以读写模式打开
        #w+     以读写模式打开 (参见 w )
        #a+     以读写模式打开 (参见 a )
        #rb     以二进制读模式打开
        #wb     以二进制写模式打开 (参见 w )
        #ab     以二进制追加模式打开 (参见 a )
        #rb+    以二进制读写模式打开 (参见 r+ )
        #wb+    以二进制读写模式打开 (参见 w+ )
        #ab+    以二进制读写模式打开 (参见 a+ )
        fp = open('%s/%s' % (image_dir,f), 'rb')

        #fp.read([size])                     #size为读取的长度,以byte为单位
        msgImage = MIMEImage(fp.read())

        #fp.close()  #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。 
        #如果一个文件在关闭后还对其进行操作会产生ValueError
        fp.close()

        msgImage.add_header('Content-ID', "<%s>" % image_name)
        msgRoot.attach(msgImage)
#定义循环
        if y != image_y:
            if y!= -1:
                contents +="</tr>"
            y = image_y
            contents +="<tr>"

# 定义td中嵌套图片文件
        contents +="<td><img src='cid:%s'></td>" % image_name

# table结束   
    contents += "</table>"
# 定义邮件格式为HTML
    msgText = MIMEText(contents, 'html')

    msgAlternative.attach(msgText)
#    msgRoot.attach(msgAlternative)
    return msgRoot
# Create the root message and fill in the from, to, and subject headers
def main(str_from,list_to,image_dir):
    pictures = _get_pictures(image_dir)
# 定义screen name,如:  Citrix_APP_Server_Loading
    for screen_name in list(set([x.split('.')[0] for x in pictures ])):
# startswith 判断字串开始
# screens 是一组 相同前缀的文件,如: screens ['Zabbix_server.2.2.1.1.525.png', 'Zabbix_server.2.2.1.0.524.png']
        screens = [x for x in pictures if x.startswith(str(screen_name) + '.') ]

        msgRoot = _create_msg(screen_name,screens,image_dir,str_from,list_to)

#定义邮件服务器地址、端口
        _sendmail(smtp_server,port,'','',str_from,list_to,msgRoot.as_string())
# 定义发送邮件信息,发件人,收件人,图片目录
if __name__ == '__main__':
   smtp_server = '10.210.1.16'
   port = 25
   str_from = '[email protected]'
   list_to = [
                "[email protected]"
             ]
   image_dir = '/data/graph/maps'
   main(str_from,list_to,image_dir)

源代码参考地址:http://heylinux.com/archives/2081.html

zabbix 监控tcp连接的状态

Tcp的连接状态对于我们web服务器来说是至关重要的,尤其是并发量ESTAB;或者是syn_recv值,假如这个值比较大的话我们可以认为是不是受到了攻击,或是是time_wait值比较高的话,我们要考虑看我们内核是否需要调优,太高的time_wait值的话会占用太多端口,要是端口少的话后果不堪设想:

一、我的上一篇已经写了步骤,这里我只是列出脚本:

#!/bin/bash
#xiaoluo
#scripts for tcp status
function SYNRECV {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'SYN-RECV' | awk '{print $2}'
}
function ESTAB {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'ESTAB' | awk '{print $2}'
}
function FINWAIT1 {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'FIN-WAIT-1' | awk '{print $2}'
}
function FINWAIT2 {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'FIN-WAIT-2' | awk '{print $2}'
}
function TIMEWAIT {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'TIME-WAIT' | awk '{print $2}'
}
function LASTACK {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'LAST-ACK' | awk '{print $2}'
}
function LISTEN {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'LISTEN' | awk '{print $2}'
}
$1

二、填写key值:当然大家在加入key值之后最好再服务器上面去执行看有没有返回值:

[root@WEB_007 scripts]# cat /usr/local/zabbix/etc/zabbix_agentd.conf.d/tcp 
#monitor tcp
UserParameter=tcp[*],/usr/local/zabbix/scripts/tcp_status $1

三、导入模板(在我的附件上,然后触发器根据自己的情况调整:)

四、查看效果:

未分类

到此结束:

在写这篇的时候刚好也写完了监控lvs的活动连接。下面也给出模板、大家自己下载,我这里给出脚本和key:

一、脚本:

#!/bin/bash
#xiaoluo
#status about lvs forward
function first {
/sbin/ipvsadm -L 2>/dev/null | grep '192.168.10.234:http' | sed '2d' | awk '{print $5}'
}
function second {
/sbin/ipvsadm -L 2>/dev/null | grep '192.168.10.235:http' | sed '2d' | awk '{print $5}'
}
function third {
/sbin/ipvsadm -L 2>/dev/null | grep '192.168.10.236:http' | sed '2d' | awk '{print $5}'
}
$1

二、key:

#monitor lvs
UserParameter=lvs[*],/usr/local/zabbix/scripts/ipvsadm_status $1

效果展示:

未分类

模板在下面自己下载:

http://down.51cto.com/data/2365654

Zabbix实现微信报警

zabbix(音同 zæbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。

下文讲述了如何通过微信实现zabbix的告警:

第一步、注册微信公众号

首先申请微信公众平台https://mp.weixin.qq.com/一个人最多申请5个公众号,所以还是可以的,申请完之后就可以根据腾讯的提示使用微信公众号了,然后用你自己的微信扫描关注微信号。

未分类

就可以看到用户数了,接下来的就要使用的用户的微信ID号了。点击用户查看用户的微信ID号。在浏览器查看用户的微信ID号。

点击总用户数,点击刚刚关注的你自己的微信号的头像,在弹出的网页url中有你微信号的id 也就是下面url标红的部分。

https://mp.weixin.qq.com/cgi-bin/singlesendpage?t=message/send&action=index&tofakeid=1415366540&token=1136922890&lang=zh_CN

未分类

第二步、下载并配置微信公众平台私有接口

下载API

# git clone https://github.com/lealife/WeiXin-Private-API

修改config文件:

# vi config.php
==============================================
<?php
// 全局配置
$G_ROOT = dirname(__FILE__);
$G_CONFIG["weiXin"] = array(
'account' => '微信公众登录号码',
'password' => '微信公众登录密码',
'cookiePath' => $G_ROOT. '/cache/cookie', // cookie缓存文件路径
'webTokenPath' => $G_ROOT. '/cache/webToken', // webToken缓存文件路径
);
==============================================
修改test.php文件
==============================================
<?php
require "config.php";
require "include/WeiXin.php";
$weiXin = new WeiXin($G_CONFIG['weiXin']);
$testFakeId = "$argv[1]";
$msg="$argv[3]";
print_r($weiXin->send($testFakeId, "$msg"));
===============================================

注意这里$msg=”$argv[3]”表示zabbix传入的第三个参数,因为在zabbix报警时会传入三个参数:一是微信好友ID,二是报警信息的主题,三是报警信息的具体内容,这里跳过了报警信息主题,直接发送报警信息内容

创建微信报警脚本weixin.sh 放到zabbix默认的脚本路径里,我的zabbix脚本路径为: /app/zabbix/share/zabbix/alertscripts

# touch /app/zabbix/share/zabbix/alertscripts/weixin.sh
===================================================
#!/bin/bash 
php test.php "$1" "$2" "$3"
===================================================
#  chmod +x weixin.sh      给脚本增加执行权限
#  chown zabbix:zabbix weixin.sh      给zabbix用户赋予权限

测试接口是否可以使用:

#  ./weixin.sh 1415366540 "" "Welcome Weixin"

若出现以下信息,则表示发送成功:

未分类

第三步、配置Zabbix告警

1、增加示警媒介类型:

未分类

2、添加用户报警媒介,这里使用administrator用户

未分类

3、添加报警动作

未分类

告警内容在本文章最下面会有文字版

未分类

测试:
停掉一台线上测试服务器的nginx,看是否收到微信的告警:如图

未分类

使用Zabbix进行微信告警配置完毕!

下面是zabbix告警模板

主 题:
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
默认信息:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

恢复主指:
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME}: {TRIGGER.NAME}已恢复!
恢复信息:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

zabbix监控华为服务器硬件状态

简介

zabbix监控华为服务器的硬件是通过iBMC,iBMC系统默认支持V3版本的SNMP服务,SNMP V1和SNMP V2C由于自身机制存在安全隐患,默认是不开启的。如果使用SNMP V1和SNMP V2C需要配置团体名,而用V3只需知道用户名密码及加密算法即可。

我们可以现在zabbix server上安装snmpwalk,然后进行如下测试:

[root@test ~]# snmpwalk -v 3 -u root -a sha -A 'Huawei12#$' -x AES -X 'Huawei12#$'  -l authPriv 192.168.5.48 1.3.6.1.4.1.2011.2.235.1.1.1.1.0
SNMPv2-SMI::enterprises.2011.2.235.1.1.1.1.0 = INTEGER: 1

我们根据https://share.zabbix.com/cat-server-hardware/huawei/huawei-pc-server提示进行监控华为RH1288 V3服务器。

配置zabbix

1. 下载模板

在以下链接中下载模板
https://share.zabbix.com/cat-server-hardware/huawei/huawei-pc-server

2. 导入模板

在”模板”-“导入”,按顺序先导入valuemaps.xml、再导入templates.xml

未分类

“Template_Huawei_PCServer”就是我们新导入的模板。

3. 编辑模板

我们可以模板中的各监控项中根据实际情况修改SNMP OID、验证口令及私钥。由于我们使用的是SNMP V3,因此我们保证验证口令及私钥正确即可;触发器及自动发现规则也是按此方式修改。

未分类

4. 创建主机

未分类

在”模板”中,添加”Template_Huawei_PCServer”模板链接即可。

5. 监控最新数据

未分类

至此华为RH1288 V3服务器的硬件状态监控完成。