前言


zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
zabbix组件主要分两个: zabbix-server和zabbix-agent。支持的监控协议有ICMP,IPMI,SNMP,HTTP以及zabbix协议(zabbix协议是最常使用的协议用来监控各被监控端)。
收集的数据存放在数据库中,数据库支持mysql,oracle等等。
第三个组件:zabbix web gui这个接口提供web页面来监控和管理各被监控端。
第四个组件:zabbix proxy(实现分布式监控专用组件非必要组件,被监控服务器超过一千以上可以使用此组件。)

本次实验逻辑架构如下

 相关组件介绍

zabbix_get进程去客户端收集数据,
zabbix_agentd进程通过监听在一个套接字上接收
zabbix_get的请求,通过zabbix_sender将
数据收集发送给服务器端,数据保存在zabbix数据库中,
zabbix_get这种方法主要用于测试,通过写脚本或远程执行命令的方式。
zabbix server自己自动会周期性的去被监控端收集数据,收集哪些数据在服务器端事先定义。
zabbix server ,zabbix database,zabbix web gui 可以部署在一台服务器上,为了提升性能可以放在不同主机上。

zabbix一些常用术语

host(主机):要监控的网络设备,可由IP或DNS名称指定
host group(主机组):主机的逻辑容器,可以包含主机和模板,但同一个组内的主机和模板不能互相链接;主机组通常在给用户或用户组指派监控权限时使用(大致了解下就可以了)。
item(监控项):这个从名字上可以理解,具体要监控哪些指标由它定义。
trigger(触发器):就是超过了定义的合理范围,这家伙就会报警。
event(事件):这都是触发器产生的。
action(动作):对事件如何应对,比如要执行哪些操作。
escalation(报警升级):如果在定义的5分钟没反应,从warning级别升到high级别,就是要提醒别人要尽快处理。
media(媒介):发送报警的手段和通道,如Email。
remote command(远程命令):预定义的命令,可在被监控主机处于某个特定条件下时自动执行。
template(模板):用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule;模板可以直接链接至单个主机。(这个概念不理解不过没关系的,只要具体会怎么操作就可以了)
application(应用):一组item的集合。
以上术语的关系可以用下图表示(大致明白就行):

上图中的poller这个进程就是去各客户端获取数据的。
zabbix产生的数据主要由四部分组成:
配置数据(忽略)
历史数据:50bytes
历史趋势数据: 128bytes
事件数据:130bytes
历史数据:采样生成的数据
历史趋势数据:每小时的最大值、最小值、平均值、统计
通过对以上数据的计算,可以得出我们需要一个多大的zabbix数据库,来定制磁盘硬件。
具体算法:
假设有60000个监控项,那每秒中处理的数据就有60000/60=1000条
历史数据大小=天数X每秒钟处理的数据量X24X3600X50Bytes
趋势数据:
每一个趋势128Bytes,
大小=天数X监控项X24X128Bytes
事件数据:
每个占据130Bytes
大小:天数X86400X130(假设每秒中产生一个事件)

本次实验的zabbix软件版本 

装下面这个版本,红框内选中的

http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/

实验所需机器3台,系统环境如下

3台机器,一台做zabbix-server,一台作为zabbix-agent,一台作为zabbix-proxy

1
2
3
4
5
[root@linux-node1 ~]# uname -rm
2.6.32-504.el6.x86_64 x86_64
[root@linux-node1 ~]# cat /etc/redhat-release
CentOS release 6.6 (Final)
[root@linux-node1 ~]#

安装zabbix相关包


复制链接地址,下载wget
noarch表明与处理器无关,src是源码包需要编译
执行如下命令,在Zabbix Server和Zabbix Agent上

1
2
3
4
mkdir /tools -p
cd /tools/
wget   http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm
rpm -ivh zabbix-release-2.4-1.el6.noarch.rpm

查看这个包安装了哪些

1
2
3
4
5
6
[root@linux-node1 tools]# rpm -ql zabbix-release
/etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
/etc/yum.repos.d/zabbix.repo
/usr/share/doc/zabbix-release-2.4
/usr/share/doc/zabbix-release-2.4/GPL
[root@linux-node1 tools]#

它创建了一个zabbix.repo文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@linux-node1 tools]# cat /etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix Official Repository - $basearch
baseurl=http://repo.zabbix.com/zabbix/2.4/rhel/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
 
[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
baseurl=http://repo.zabbix.com/non-supported/rhel/6/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
gpgcheck=1
[root@linux-node1 tools]#

  

Zabbix Server服务器安装如下包

1
2
3
4
5
6
7
8
9
10
11
12
[root@linux-node1 tools]# yum install zabbix zabbix-server zabbix-web zabbix-server-mysql  zabbix-web-mysql  zabbix-agent -y
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Install Process
Loading mirror speeds from cached hostfile
Package zabbix-2.4.8-1.el6.x86_64 already installed and latest version
Package zabbix-server-2.4.8-1.el6.x86_64 already installed and latest version
Package zabbix-web-2.4.8-1.el6.noarch already installed and latest version
Package zabbix-server-mysql-2.4.8-1.el6.x86_64 already installed and latest version
Package zabbix-web-mysql-2.4.8-1.el6.noarch already installed and latest version
Package zabbix-agent-2.4.8-1.el6.x86_64 already installed and latest version
Nothing to do
[root@linux-node1 tools]#

由于Zabbix Server把数据存到mysql里,因此还需要安装mysql相关包

1
2
3
4
5
6
7
8
[root@linux-node1 tools]# yum install  -y mysql-server mysql
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Install Process
Loading mirror speeds from cached hostfile
Package mysql-server-5.1.73-8.el6_8.x86_64 already installed and latest version
Package mysql-5.1.73-8.el6_8.x86_64 already installed and latest version
Nothing to do
[root@linux-node1 tools]#

启动mysqld

1
2
3
[root@linux-node1 tools]# /etc/init.d/mysqld start
Starting mysqld:                                           [  OK  ]
[root@linux-node1 tools]#

复制配置文件替换默认的

1
2
3
[root@linux-node1 tools]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf'? y
[root@linux-node1 tools]#

在[mysqld]模块最后加入字符集的相关参数

1
2
3
character-set-server = utf8
init-connect = 'SET NAMES utf8'
collation-server = utf8_general_ci

加入之后如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[mysqld]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
character-set-server = utf8
init-connect = 'SET NAMES utf8'
collation-server = utf8_general_ci

重启mysql

1
2
3
4
[root@linux-node1 tools]# /etc/init.d/mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]
[root@linux-node1 tools]#

登录mysql查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@linux-node1 tools]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.1.73-log Source distribution
 
Copyright (c) 2000, 2013, 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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)
 
mysql>

官网有关于Zabbix建库相关脚本

1
2
3
4
5
6
7
8
9
MySQL
shell> mysql -uroot -p<password>
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by '<password>';
mysql> quit;
shell> mysql -uzabbix -p<password> zabbix < database/mysql/schema.sql
# stop here if you are creating database for Zabbix proxy
shell> mysql -uzabbix -p<password> zabbix < database/mysql/images.sql
shell> mysql -uzabbix -p<password> zabbix < database/mysql/data.sql

建库和授权用户操作如下

1
2
3
4
5
6
7
8
9
mysql> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
 
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
 
mysql> exit
Bye
[root@linux-node1 tools]#

导入脚本操作如下

1
2
3
4
5
6
7
8
9
[root@linux-node1 tools]# cd /usr/share/doc/zabbix-server-mysql-2.4.8/create/
data.sql    images.sql  schema.sql 
[root@linux-node1 tools]# cd /usr/share/doc/zabbix-server-mysql-2.4.8/create/
[root@linux-node1 create]# ls
data.sql  images.sql  schema.sql
[root@linux-node1 create]# mysql -uzabbix -pzabbix zabbix <schema.sql
[root@linux-node1 create]# mysql -uzabbix -pzabbix zabbix <images.sql
[root@linux-node1 create]# mysql -uzabbix -pzabbix zabbix <data.sql
[root@linux-node1 create]#

检查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
[root@linux-node1 create]# mysql -uzabbix -pzabbix -e 'use zabbix;show tables;'
+-----------------------+
| Tables_in_zabbix      |
+-----------------------+
| acknowledges          |
| actions               |
| alerts                |
| application_template  |
| applications          |
| auditlog              |
| auditlog_details      |
| autoreg_host          |
| conditions            |
| config                |
| dbversion             |
| dchecks               |
| dhosts                |
| drules                |
| dservices             |
| escalations           |
| events                |
| expressions           |
| functions             |
| globalmacro           |
| globalvars            |
| graph_discovery       |
| graph_theme           |
| graphs                |
| graphs_items          |
| group_discovery       |
| group_prototype       |
| groups                |
| history               |
| history_log           |
| history_str           |
| history_text          |
| history_uint          |
| host_discovery        |
| host_inventory        |
| hostmacro             |
| hosts                 |
| hosts_groups          |
| hosts_templates       |
| housekeeper           |
| httpstep              |
| httpstepitem          |
| httptest              |
| httptestitem          |
| icon_map              |
| icon_mapping          |
| ids                   |
| images                |
| interface             |
| interface_discovery   |
| item_condition        |
| item_discovery        |
| items                 |
| items_applications    |
| maintenances          |
| maintenances_groups   |
| maintenances_hosts    |
| maintenances_windows  |
| mappings              |
| media                 |
| media_type            |
| opcommand             |
| opcommand_grp         |
| opcommand_hst         |
| opconditions          |
| operations            |
| opgroup               |
| opmessage             |
| opmessage_grp         |
| opmessage_usr         |
| optemplate            |
| profiles              |
| proxy_autoreg_host    |
| proxy_dhistory        |
| proxy_history         |
| regexps               |
| rights                |
| screens               |
| screens_items         |
| scripts               |
| service_alarms        |
| services              |
| services_links        |
| services_times        |
| sessions              |
| slides                |
| slideshows            |
| sysmap_element_url    |
| sysmap_url            |
| sysmaps               |
| sysmaps_elements      |
| sysmaps_link_triggers |
| sysmaps_links         |
| timeperiods           |
| trends                |
| trends_uint           |
| trigger_depends       |
| trigger_discovery     |
| triggers              |
| user_history          |
| users                 |
| users_groups          |
| usrgrp                |
| valuemaps             |
+-----------------------+
[root@linux-node1 create]#

   

配置文件修改


修改apache相关配置

zabbix Server默认用的apache,安装Zabbix Server时,它自动帮我们装好了apache
修改apache配置文件里zabbix.conf文件的时区,并取消注释。这里可以vim修改,也可以采用sed替换

1
2
3
4
5
6
7
8
9
[root@linux-node1 conf.d]# cd /etc/httpd/conf.d/
[root@linux-node1 conf.d]# ls
mod_dnssd.conf  php.conf  README  welcome.conf  zabbix.conf
[root@linux-node1 conf.d]# grep -n timezone zabbix.conf
19:        # php_value date.timezone Europe/Riga
[root@linux-node1 conf.d]# vim zabbix.conf
[root@linux-node1 conf.d]# grep -n timezone zabbix.conf
19:        php_value date.timezone Asia/Shanghai
[root@linux-node1 conf.d]#

查看下相关配置

这里配置文件里带的默认的跳转,Alias这一行,也就是zabbix默认代码的目录
1
2
3
4
5
6
7
8
9
10
11
[root@linux-node1 conf.d]# head -10 zabbix.conf
#
# Zabbix monitoring system php web frontend
#
 
Alias /zabbix /usr/share/zabbix
 
<Directory "/usr/share/zabbix">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny

看看都有哪些东西

到这个目录下ls一下,看到都是php代码。zabbix前端都是php写的
它的server端是c和c++写的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@linux-node1 conf.d]# cd /usr/share/zabbix/
[root@linux-node1 zabbix]# ls
acknow.php                     chart.php                    index.php           report5.php
actionconf.php                 charts.php                   items.php           report6.php
adm.gui.php                    conf                         js                  robots.txt
adm.housekeeper.php            conf.import.php              jsLoader.php        screenconf.php
adm.iconmapping.php            dashboard.php                jsrpc.php           screenedit.php
adm.images.php                 dashconf.php                 latest.php          screens.php
adm.macros.php                 discoveryconf.php            locale              scripts_exec.php
adm.other.php                  discovery.php                maintenance.php     scripts.php
adm.regexps.php                disc_prototypes.php          map.php             search.php
adm.triggerdisplayoptions.php  events.php                   maps.php            services.php
adm.triggerseverities.php      fonts                        media_types.php     setup.php
adm.valuemapping.php           graphs.php                   overview.php        slideconf.php
adm.workingtime.php            history.php                  popup_bitem.php     slides.php
api_jsonrpc.php                host_discovery.php           popup_httpstep.php  srv_status.php
applications.php               hostgroups.php               popup_media.php     styles
audio                          hostinventoriesoverview.php  popup_period.php    sysmap.php
auditacts.php                  hostinventories.php          popup.php           sysmaps.php
auditlogs.php                  host_prototypes.php          popup_right.php     templates.php
authentication.php             host_screen.php              popup_trexpr.php    tr_comments.php
browserwarning.php             hosts.php                    popup_usrgrp.php    tr_events.php
chart2.php                     httpconf.php                 profile.php         trigger_prototypes.php
chart3.php                     httpdetails.php              proxies.php         triggers.php
chart4.php                     httpmon.php                  queue.php           tr_logform.php
chart5.php                     image.php                    report1.php         tr_status.php
chart6.php                     images                       report2.php         tr_testexpr.php
chart7.php                     imgstore.php                 report3.php         usergrps.php
chart_bar.php                  include                      report4.php         users.php
[root@linux-node1 zabbix]#

 

现在的版本挺智能的,下面14到19行参数都自动加上了,以前没有的

启动apache
1
2
3
[root@linux-node1 conf.d]# /etc/init.d/httpd start
Starting httpd:                                            [  OK  ]
[root@linux-node1 conf.d]#

 

修改Zabbix Server默认配置文件

因为zabbix存mysql数据,所以要改下server端的配置文件,server端和mysql打交道 

1
2
3
4
[root@linux-node1 conf.d]# cd /etc/zabbix/
[root@linux-node1 zabbix]# ls
web  zabbix_agentd.conf  zabbix_agentd.d  zabbix_server.conf
[root@linux-node1 zabbix]# vim zabbix_server.conf

  

修改DBHost 和DBName

用户名和密码

通过浏览器安装配置zabbix-server


浏览器里输入如下链接

http://10.0.1.161/zabbix

看到如下界面进行安装

点击下一步,所有条件都满足
它在检测一些依赖,注意当前的数值必须是mysql才行,时间时区也要对

端口是0,0就是默认的3306

test Ok next

给它起个名字zabbix,这是是可选的。默认端口就是10051

summary

上面所有的操作都是创建了下面配置文件,并写进去

点击Finish自动跳转到了登录界面

默认的用户名是Admin,密码是zabbix

登录成功,第一件事就是改密码

zabbix  server 还没运行,上面提示说明这个前端页面不仅仅访问数据库,还访问zabbix  server

1
2
3
[root@linux-node1 zabbix]# /etc/init.d/zabbix-server start
Starting Zabbix server:                                    [  OK  ]
[root@linux-node1 zabbix]#

  

Zabbix Server本身也要监控自己

接下来运行一个agent端,先修改agent配置文件

vim /etc/zabbix/zabbix_agentd.conf

启动agent

1
2
3
4
[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf
[root@linux-node1 ~]# /etc/init.d/zabbix-agent start
Starting Zabbix agent:                                     [  OK  ]
[root@linux-node1 ~]#

  

zabbix的web界面介绍


一些仪表盘解释

目前有0个主机启动,1个主机关闭,有38个模板(zabbix自带的监控模板)
items 是监控项的意思,(比如cpu,内存 都是监控项)
triggers是触发器,启用的,关闭的,有故障的,ok的
Required server performance,new value 参照指标

看configuration的子项
Maintenance 是维护的意思,比如停机维护。这期间不让它报警这台机器

Actions 是故障了要通知,怎么通知呢,在这里配置
比如配置发短信,发邮件,还能配置让它执行命令,比如reboot

screens是一些图片效果
slide shows是幻灯片,比如你有3个大屏,但是只有一个屏幕,你可以让它来回切换
Maps 你可以做一个架构图
Discovery 和自动化部署有关,
IT services :sla(SLA:Service-Level Agreement的缩写,意思是服务等级协议),比如我保证网站可用率 99%。(管理体系相关)你今年的sla达标了么等

主机组,特别简单
下面Zabbix server显示红色表示这台机器没有监控

来到主机这里
后面几列是触发器,图形。发现的规则。做web监控的(如果返回200表示ok,不是200让它报警)
Interface是接口
zabbix agent监听的端口是10050端口
zabbix server监听的是10051端口

1
2
3
4
5
6
[root@linux-node1 ~]# netstat -lntp |grep 100
tcp        0      0 0.0.0.0:10050               0.0.0.0:*                   LISTEN      5846/zabbix_agentd 
tcp        0      0 0.0.0.0:10051               0.0.0.0:*                   LISTEN      5692/zabbix_server 
tcp        0      0 :::10050                    :::*                        LISTEN      5846/zabbix_agentd 
tcp        0      0 :::10051                    :::*                        LISTEN      5692/zabbix_server 
[root@linux-node1 ~]#

也可以使用lsof命令查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@linux-node1 ~]# lsof -i:10050
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
zabbix_ag 5846 zabbix    4u  IPv4  24785      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 5846 zabbix    5u  IPv6  24786      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 5848 zabbix    4u  IPv4  24785      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 5848 zabbix    5u  IPv6  24786      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 5849 zabbix    4u  IPv4  24785      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 5849 zabbix    5u  IPv6  24786      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 5850 zabbix    4u  IPv4  24785      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 5850 zabbix    5u  IPv6  24786      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 5851 zabbix    4u  IPv4  24785      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 5851 zabbix    5u  IPv6  24786      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 5852 zabbix    4u  IPv4  24785      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 5852 zabbix    5u  IPv6  24786      0t0  TCP *:zabbix-agent (LISTEN)
[root@linux-node1 ~]# lsof -i:10051

  

添加对zabbix server的监控

把127.0.0.1改下。点击这里就可以编辑它

JMX 监控jvm的
IPMI监控硬件的。监控IPMI性能比较差,经常获取不到数据
监控项多了可能会慢,比如监控一项。温度,就不用监控风扇了。风扇不转了温度肯定上来了
Proxy:表示zabbix支持分布式的。
enabled勾选的话,表示打开监控。监控Zabbix Server,也可以不勾选,返回界面之后点击Enable

模板

填上IPMI的用户名密码就可以连接了,虚拟机不支持IPMI,这里就不讲了


它在做snmp监控的时候用,简单来说,就是给一个变量设置一个值

主机资产,zabbix提供了一个资产管理的功能,默认是关闭状态,可以选manual手动填,也可以选
Automatic自动,在创建items的时候,可以把得到的值映射到资产里面,这个功能比较鸡肋,比如下面网卡只有两个,我服务器要是4个网卡呢

点击就启用了

最后一栏,它现在是灰色的表示它还和agent没通信,它如果正常通信了。会变绿色的
变绿的说明监控上了。变红表示没监控上

变绿了

application和item以及graph介绍


application类似items监控项的监控组,就是组的概念

点击右边的items,看到如下显示

监控间隔。60秒
历史保留的天数7天
趋势图保留的天数,365天
点一下enabled就把这一项关闭了,关闭后就不监控这一项了
如果有个东西老报警。你就可以把它关闭了

鼠标放触发器上,看到条件表达式,每五分钟,超过300 什么值就报警

graphs 图形,点进去,看到默认生成了一些

可以看到每项默认的颜色,还支持函数,avg平均啊,最小啊。等

添加node2到监控里


在linux-node2上装zabbix客户端

1
2
3
4
5
mkdir /tools -p
cd /tools/
wget   http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm
rpm -ivh zabbix-release-2.4-1.el6.noarch.rpm
yum install zabbix-agent  -y

自定义监控和图表

zabbix服务端是不支持windows的,只有客户端支持windows
下面地址可以下载windows客户端监控。
它是个exe文件,配置个zabbix.conf文件

它有2个参数需要注意下

-c  指定配置文件
-x  把它加入系统服务

http://www.zabbix.com/download2  

修改linux-node2的Zabbix agent配置文件

vim /etc/zabbix/zabbix_agentd.conf

启动agent

1
2
3
[root@linux-node2 tools]# /etc/init.d/zabbix-agent start
Starting Zabbix agent:                                     [  OK  ]
[root@linux-node2 tools]#

另外让它开机启动,可以选择加入rc.local

1
2
[root@linux-node2 ~]# echo "/etc/init.d/zabbix-agent start" >>/etc/rc.local
[root@linux-node2 ~]#
创建一个新的主机组

如下

接着创建一个主机

host-name这里必须写正确的,显示的名称可以随便写,但是建议规范点

选择模板
模板里带有好多监控项,触发器,图形。因为模板太多了。上百个,就搞成搜索的了

搜索linux
上面的是基于agent监控的,下面是基于snmp监控的,就不用装agent了

模板配置完毕

过一会右边会变绿的

等一会变绿色了

如果你公司服务器都确定使用zabbix
那么zabbix应该在装机的时候装上,尽量不要后期装上(可以提前配置好dns,域名,当模板)

在监控里查看主机是否有数据了

选择主机

通过拖动这里也可以改变时间范围,查看历史数据

点击这里可以隐藏下面的Zoom时间栏

这个agent  ping  不是icmp的ping,而是通过agent ping的。agent发个请求看它返回不返回

活动内存,小于20M告警,触发了

passwd文件校验,它检验文件的md5值

每秒的上下文切换

自定义监控项并加入到监控页面上


以上都是模板带的监控项,如何自定义一个监控项呢
自定义监控项有2个步骤
1、改配置文件,在里面写上自定义的监控项
2、web页面加上

假设想获取node2上当前登录的用户数
其实这个默认模板已经有了,不管,我们通过自己方式获取

获取命令如下

1
2
3
4
5
[root@linux-node2 ~]# uptime
 06:29:23 up 22 min,  1 user,  load average: 0.00, 0.00, 0.00
[root@linux-node2 ~]# uptime | awk -F ' '  '{print $5}'
1
[root@linux-node2 ~]#

修改linux-node2的配置文件

vim /etc/zabbix/zabbix_agentd.conf

修改下面地方

这个东西的写法是这样格式的
UserParameter=key,command

逗号隔开
保证这个key在整个系统是唯一的,command可以换成脚本
另外这个用户自定义的参数返回值最大是512KB,不能超过这个
UserParameter=login-user,uptime |awk -F ' ' '{print $4}'

这里注意下,下面截图是错的,应该是$4

保存,重启

1
2
3
4
5
[root@linux-node2 ~]# vim /etc/zabbix/zabbix_agentd.conf
[root@linux-node2 ~]# /etc/init.d/zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                     [  OK  ]
[root@linux-node2 ~]#

  

服务端测试下能否获取这个客户端自定义的值
zabbix-get命令。之前没装,补上

1
2
3
[root@linux-node1 ~]# zabbix_get
-bash: zabbix-get: command not found
[root@linux-node1 ~]# yum install zabbix-get -y

查看帮助用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@linux-node1 ~]# zabbix_get
usage: zabbix_get [-hV] -s <host name or IP> [-p <port>] [-I <IP address>] -k <key>
[root@linux-node1 ~]# zabbix_get --help
Zabbix get v2.4.8 (revision 59539) (20 April 2016)
 
usage: zabbix_get [-hV] -s <host name or IP> [-p <port>] [-I <IP address>] -k <key>
 
Options:
  -s --host <host name or IP>          Specify host name or IP address of a host
  -p --port <port number>              Specify port number of agent running on the host. Default is 10050
  -I --source-address <IP address>     Specify source IP address
 
  -k --key <key of metric>             Specify key of item to retrieve value for
 
  -h --help                            Display help information
  -V --version                         Display version number
 
Example: zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]"
[root@linux-node1 ~]#

获取方式如下

1
2
3
[root@linux-node1 ~]# zabbix_get -s 10.0.1.162 -k login-user
1
[root@linux-node1 ~]#

客户端克隆一个会话,服务端继续取值,这就是一个自定义的key,当然你里面写什么都可以

1
2
3
[root@linux-node1 ~]# zabbix_get -s 10.0.1.162 -k login-user
2
[root@linux-node1 ~]#

get命令获取成功,才能加。准备加到web上  

点击进去

点击Items,显示如下

点击右上角的Create item

name可以和key不一样,但是key必须是之前设置的,右边select是选择系统自带的key

选择获取的数据类型

Data type 中decimal是10进制的意思
units 是单位的意思。zabbix默认会把1000换算成1k的

如果勾选这里,上面的数会乘以文本框里的东西

不太重要的key建议设置5分钟,太频繁没什么用,反而引起zabbix性能下降

设置额外的时间间隔,比如白天每5分钟获取一次,晚上3分钟获取一次

下面设置了就以下面为准

把它加到一个应用里,要么自己写一个,要么选一个,这里新建一个demo的应用

这一项和资产管理相关,它会把你获取的某一项自动加到你选择的资产管理里面
随便选一个,比如Tag

描述的东西能写最好写

学习创建图形把自定义的key数据以图形方式显示

 

点击Add

 

 勾选

有数据了

 

点击+ 可以加入到收藏里,然后在仪表盘查看

 

 

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

zabbix自定义报警-动作

 
打开资产自动接收

 

这里看到主机资产有数据了,这里的数据,就是来自下面的关联

上面的数据就是设置login-user时候设置的关联

 

 有些关联显示的慢,比如下面的OS,原因就是items那里设置的更新时间比较长,原先是3600秒,改成60秒
 

创建触发器

 

起个名字,添加个表达式

 

下面这里还可以设置时间,次数
下面意思,就是最后时间大于2次的
点击Insert
 

描述可以不写,选择警告级别

查看另一个页面 --依赖
如果某件事发生了,就别报这个警了。比如如果主机down了就别报警了。先不加这个依赖

 

客户端多复制一个console,触发它报警

图形里也能看到

 

profile里面可以设置报警声音,启用它

 仪表板,报警会产生一个事件

 处理告警,点击ack

每一个事件最好都ack一下,这是好习惯
 

actions是空的,说明什么也没干
 

配置告警之后的actions

 
可以配置一些告警短信和邮件等。默认自带了一个actions,打开这个actions
 

 下面是默认短信发送内容

如果是发短信报警,要把上面的message改的短一些,改成70个字符以内
国内英文单词按字母算,汉字按个数算
精简下,最下面是恢复的时候再发个短信,把下面粘贴下放下面即可,生产环境是这么玩的

 
条件,
1、你这个机器没在维护里面
2、你这个触发器故障的时候

有台机器你不想让他告警,但是又想监控它,可以使用host=

下面是操作什么

第一分钟到第三分钟,每分钟发一个告警的通知
如果第3分钟到第5分钟,告警还在可以设置发领导(现网这里悠着点,肯定要尽快解决,也是对自己一个督促)
 

 下面就是假设,假设6分钟到10分钟还没处理,发给你的cto,这就是故障的升级机制

设置告警的介质

 
默认是email
jabber是一个开源的东西,用不上
sms是短信的,也可以使用gsm的猫,短信猫等都是支持的

点开邮件,发现比较鸡肋。 没用用户名密码等,一般不使用它

短信这个除非你有短信猫,一般也不用
jabber更不用

 模拟触发执行脚本,自己去创建

你可以写个脚本发邮件,发短信等,或者echo  hehe,一般使用脚本是主流

 
怎么加脚本呢vim /etc/zabbix/zabbix_server.conf

AlertScriptsPath=/usr/lib/zabbix/alertscripts
这里配置了报警脚本的路径
把你写的脚本放这里就好了,这样它就能找到了

进入如下目录写一个脚本,内容如下。

一般情况下,我们是执行Zabbix脚本,比如发邮件

这个zabbix脚本要接收3个参数
$1,$2,$3
$1是邮件地址
$2 邮件主题
$3 邮件内容

1
2
3
4
5
[root@linux-node1 alertscripts]# pwd
/usr/lib/zabbix/alertscripts
[root@linux-node1 alertscripts]# cat Send_Mail.sh
echo $1 $2 $3 >>/tmp/test.log
[root@linux-node1 alertscripts]#

加上课执行权限

1
[root@linux-node1 alertscripts]# chmod +x Send_Mail.sh

网页这里就可以这么写了

给它指定个用户,让某用户可以运行这个脚本
注意,前面是用户组,后面是成员

点击Members,然后点击Admin,下面这里不用动,点击Media

报警介质添加
发给谁,什么时间,什么级别发
如果这个邮箱是老板的话,可以去掉不重要的告警

我的选择如下

Add之后

权限这里分读写和只读以及拒绝访问,最下面可以看到权限只能分配给组

 模拟故障场景,linux-node2的ssh窗口多复制几个,等待一会看到下面日志有内容了
1
2
3
4
[root@linux-node1 alertscripts]# tail -f /tmp/test.log
525031638@qq.com PROBLEM linux-node2:login-user): 3
^C
[root@linux-node1 alertscripts]#

仪表盘里也能看到它自动执行了action 

尝试把脚本改成如下发邮件的脚本,这个脚本需要把smtpserver,username,password改成发件方的。
另外这个脚本需要接收3个参数,第一个参数是收件人的邮箱(Zabbix会传给它),第二个参数是邮件主题(Zabbix会传给它),第三个参数是邮件内容(Zabbix也会传给它)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@linux-node1 alertscripts]# pwd
/usr/lib/zabbix/alertscripts
[root@linux-node1 alertscripts]# ll
total 8
-rwxr-xr-x  1 root root 714 Mar 13 20:16 pymail.py
-rwxr-xr-x. 1 root root  30 Nov 29 23:20 Send_Mail.sh
[root@linux-node1 alertscripts]# cat pymail.py
#!/usr/bin/python
#coding: utf-8 
import smtplib 
import sys
from email.mime.text import MIMEText 
from email.header import Header 
from email.Utils import COMMASPACE
   
receiver = sys.argv[1]
subject = sys.argv[2]
mailbody =  sys.argv[3]
smtpserver = 'smtp.exmail.qq.com' 
username = 'test1@xxxxxx.com' 
password = '123456' 
sender = username
   
msg = MIMEText(mailbody,'html','utf-8')#中文需参数‘utf-8’,单字节字符不需要 
msg['Subject'] = Header(subject, 'utf-8'
msg['From'] = username
msg['To'] = receiver
   
smtp = smtplib.SMTP() 
smtp.connect(smtpserver) 
smtp.login(username, password) 
smtp.starttls()
smtp.sendmail(msg['From'], msg['To'], msg.as_string()) 
smtp.quit()
[root@linux-node1 alertscripts]#

  

QQ邮箱可以收到邮件

解决告警之后又收到了恢复正常的邮件

看到邮件内容多了括号和空格,把下面多余的空格和括号删除即可

Update之后,别扭的括号和空格都没了

qq邮件可以绑定微信。对于使用微信的用户可以及时看到告警

简单制作一个模板

制作模板
 

查看linux自带的模板

点开进去,可以看到此模板配置情况

创建自定义模板

给此模板命名为demo,同时把linux-node2加入到此模板里

link给一个模板

点击Update

点击Update之后,提示模板不能被通过此模板再去link给其它模板(这里不是很明白,有时间再研究下)

去掉link,点击update。模板创建好了,目前什么都是空的。没有application和items
建立完毕,目前什么都是空的

添加items

 

把login-user 这个之前创建的item加入到模板里
 
 key这里,要手写,不要选择,因为是自定义的,select是搜索不到的

还可以给这个模板继续创建Application,起名app1

把之前创建的items加入到app1

 app1里面多了Items,那个login-user
 

最后demo模板结果如下

你可以把这个模板链接到任何一台机器上,这样模板里有的监控项,那个机器就有了
其实你自定义的监控项可以从配置文件里取出来,放下面目录下,然后在客户端主配置文件里include进去

这里面默认还有个mysql的监控项呢
1
2
3
4
[root@linux-node2 zabbix_agentd.d]# cd /etc/zabbix/zabbix_agentd.d/
[root@linux-node2 zabbix_agentd.d]# ls
userparameter_mysql.conf
[root@linux-node2 zabbix_agentd.d]#

这个agent.conf自带include选项
生产环境都建议这么干。尽量不要修改原来的配置文件。更专业一点

zabbix导入自定义模板--tcp的11种状态监控

 
 获取服务器的tcp的11种状态的模板和脚本(常用于web服务器和反向代理服务器)。
脚本里采用ss命令取tcp状态,ss命令性能强于netstat
这里使用2个文件

创建一个用于存放脚本插件的目录
1
2
3
4
5
6
7
[root@linux-node2 alertscripts]# cd /etc/zabbix/
[root@linux-node2 zabbix]# ls
web  zabbix_agentd.conf  zabbix_agentd.d  zabbix_server.conf
[root@linux-node2 zabbix]# mkdir shells
[root@linux-node2 zabbix]# cd shells/
[root@linux-node2 shells]# pwd
/etc/zabbix/shells

把脚本上传上去

1
2
3
4
5
6
7
8
9
[root@linux-node2 shells]# rz -E
rz waiting to receive.
[root@linux-node2 shells]#
[root@linux-node2 shells]# ls
zabbix_linux_plugin.sh
[root@linux-node2 shells]# chmod +x zabbix_linux_plugin.sh
[root@linux-node2 shells]# ./zabbix_linux_plugin.sh
Usage: ./zabbix_linux_plugin.sh {tcp_status key|memcached_status key|redis_status key|nginx_status key}
[root@linux-node2 shells]#
 
你要告诉它,你监控什么东西,它的key是什么。
这里截取模板文件部分内容

因此,运行此脚本需要给它2个参数

1
2
3
4
5
[root@linux-node2 shells]# ./zabbix_linux_plugin.sh tcp_status LISTEN
14
[root@linux-node2 shells]# ./zabbix_linux_plugin.sh tcp_status TIME-WAIT
52
[root@linux-node2 shells]#

在下面目录下,创建一个文件,存放自定义的key和value,而value通过此脚本获取

key这里是linux_status[*] ,表示它支持列表

1
2
3
4
5
6
7
[root@linux-node2 zabbix_agentd.d]# pwd
/etc/zabbix/zabbix_agentd.d
[root@linux-node2 zabbix_agentd.d]# ls
userparameter_mysql.conf  zabbix-linux-plugin.conf
[root@linux-node2 zabbix_agentd.d]# cat zabbix-linux-plugin.conf
UserParameter=linux_status[*],/etc/zabbix/shells/zabbix_linux_plugin.sh "$1" "$2" "$3"
[root@linux-node2 zabbix_agentd.d]#

重启linux-node2的Zabbix agent

1
2
3
4
[root@linux-node2 zabbix_agentd.d]# /etc/init.d/zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                     [  OK  ]
[root@linux-node2 zabbix_agentd.d]# cd

  

server端通过zabbix_get获取数据没问题

1
2
3
[root@linux-node1 zabbix]# zabbix_get -s 10.0.1.162 -k linux_status[tcp_status,ESTAB]
2
[root@linux-node1 zabbix]#

  

注意,zabbix监控的时候,是使用的zabbix用户

1
2
3
[root@linux-node2 ~]# ll /tmp/netstat.tmp
-rw-rw-r-- 1 zabbix zabbix 31 Mar 13 22:09 /tmp/netstat.tmp
[root@linux-node2 ~]#

  

接下来你要做的是,创建一种模板,tcp有11个状态,你要创建11个key
然后做个图,这里有别人做好的
配置--模板--导入

选择电脑上的模板文件

 

 模板导入成功

 
 

点击Items看到11个监控项,name右边是key

 

接下来给一个主机加这个模板

add

可以批量更改

 

改时间间隔为30秒,仅仅出于测试目的,现网不要这么做
 
 

本来是300的,都变成了30秒

 

 查看图形显示这里
如果没有数据会返回0,注意0不是空。这里写成0是有意义的。
  

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

 
zabbix自动注册简单介绍---创建自动注册的actions

 
怎么把1000台机器加zabbix里
zabbix提供了网络发现和自动注册2个功能,发现有机器连过来,给它加个模板
如果是windows,link一个win的模板。如果是linux,link一个linux的模板。
server主动发现,是你设置一个IP范围,server主动去扫描
自动注册是agent端发起的。这些都依赖于action
甚至可以让它自动加入到主机组
 

下面就是自动注册

在operations这里找到Add host

 
 
 
 action里面可以加入如下动作。自动加入到组,并且自动Link一个模板
 

 

 
 
创建Screen

screen让你可以把喜欢或者觉得重要的graph加入到一个图形界面里显示。比如同时显示2个监控图形。

 

创建1个2行2列的screen。

 

 
 
 

 点击change可以添加图形

点击change可以随便选择,选择放graph
注意下面Dynamic要勾上

4个change都改了

 面板这里这里可以添加喜爱的screen

加入进来了

从Monitor--Screens里也可以加

zabbix监控主动模式


默认情况下zabbix是运行在被动模式,这个主动和被动是针对zabbix-agent来说的
agent默认监听一个端口,10050,server会定期主动过来要数据。server端主动的发命令,告诉agent。取哪些数据
如果1万台机器,zabbix同时要发10000个请求到agent,问他们数据。这么弄肯定有问题
zabbix agent也支持主动模式,主动给服务器发消息,这时候用于分布式比较好了

 
下面是目前被动模式的配置

 

 
 
 
 
 添加agent主动监控模板
模板可以克隆目前的被动模板,然后更改为主动模式

全部克隆

 

 
zabbix基本上除了加机器,所有地方都可以克隆,其余均不动,这里加个Active。点击下面的add即可

 
看到了刚才克隆的
 

 
 
点开这个模板,你能看到它连接了某个模板

点击进去

点击Full clone

 
 

把克隆出来的改成如下名字,多了个Active用来区分,然后点击Add

 
 

把系统模板的链接改下,改成主动的那个

改成如下

以上更改仅仅是添加了新的模板,items这里并没改掉

 
找到这个模板,然后全选

批量修改

 

下面这里改成Active的

右边的items这里都变成了Active的。上面没变的是link的另一个模板的,因此link的模板也要改

 

 
批量更改link的模板的items
 

也改成active的

 改成如下的了
 
 

 再次查看系统active的模板,items全部变成active的了

删除之前的node2主机,改成主动模式添加

node2的配置文件需要更改
把Server和ListenPort都注释掉

下面是设置为0才表示agent开启主动监控模式

把ServerActive改成Zabbix Server的地址,把Hostname改成自己的主机名

 

 过滤下配置
1
2
3
4
5
6
7
8
9
10
[root@linux-node2 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
StartAgents=0
ServerActive=10.0.1.161
Hostname=linux-node2.example.com
Include=/etc/zabbix/zabbix_agentd.d/
UserParameter=login-user,uptime | awk -F ' '  '{print $4}'
[root@linux-node2 ~]#

重启agent服务

1
2
3
4
[root@linux-node2 ~]# /etc/init.d/zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                     [  OK  ]
[root@linux-node2 ~]#

看到不再监听端口了

1
2
3
4
5
6
7
8
9
10
11
[root@linux-node2 ~]# 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:22                  0.0.0.0:*                   LISTEN      2075/sshd          
tcp        0      0 :::22                       :::*                        LISTEN      2075/sshd          
[root@linux-node2 ~]# ps -ef | grep zabbix
zabbix    76194      1  0 19:38 ?        00:00:00 zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
zabbix    76195  76194  0 19:38 ?        00:00:00 zabbix_agentd: collector [idle 1 sec]         
zabbix    76197  76194  0 19:38 ?        00:00:00 zabbix_agentd: active checks #1 [idle 1 sec]  
root      76211  75384  0 19:42 pts/0    00:00:00 grep --colour=auto zabbix
[root@linux-node2 ~]#

  

网页里添加主机

 
 
 模板里添加此主机
 

 
 
 这时候,主机这里显示灰色

 监控这里开始有数据了,表示主动监控成功了

 
 
 
Zabbix Proxy

 
假如你有多个机房,你每个机房都可以部署zabbix proxy,它的作用主要方面是减轻Zabbix Server的压力
有些公司有1万个主机需要监控,部署了10个Zabbix Proxy,proxy 不处理任何东西,仅仅搜集数据
在10.0.1.163机器上安装Zabbix Proxy
先配置yum源
1
2
3
4
mkdir /tools -p
cd /tools/
wget   http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm
rpm -ivh zabbix-release-2.4-1.el6.noarch.rpm

  

zabbix-proxy需要有一个数据库,因为它要搜集数据,另外zabbix-proxy是没有web界面的,它只是一个进程
1
yum install -y zabbix-proxy  zabbix-proxy-mysql mysql-server

  

安装完毕
1
2
3
4
5
6
7
8
9
10
11
12
[root@linux-proxy tools]# yum install -y zabbix-proxy  zabbix-proxy-mysql mysql-server
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Install Process
Loading mirror speeds from cached hostfile
 * base: mirrors.cn99.com
 * extras: mirrors.cn99.com
 * updates: mirrors.cn99.com
Package zabbix-proxy-2.4.8-1.el6.x86_64 already installed and latest version
Package zabbix-proxy-mysql-2.4.8-1.el6.x86_64 already installed and latest version
Package mysql-server-5.1.73-8.el6_8.x86_64 already installed and latest version
Nothing to do
[root@linux-proxy tools]#

启动刚装的mysql,并设置密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
[root@linux-proxy tools]# /etc/init.d/mysqld start
Initializing MySQL database:  WARNING: The host 'linux-proxy.example.com' could not be looked up with resolveip.
This probably means that your libc libraries are not 100 % compatible
with this binary MySQL version. The MySQL daemon, mysqld, should work
normally with the exception that host name resolving will not work.
This means that you should use IP addresses instead of hostnames
when specifying MySQL privileges !
Installing MySQL system tables...
OK
Filling help tables...
OK
 
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
 
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
 
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h linux-proxy.example.com password 'new-password'
 
Alternatively you can run:
/usr/bin/mysql_secure_installation
 
which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.
 
See the manual for more instructions.
 
You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &
 
You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl
 
Please report any problems with the /usr/bin/mysqlbug script!
 
                                                           [  OK  ]
Starting mysqld:                                           [  OK  ]
[root@linux-proxy tools]# /usr/bin/mysqladmin -uroot password 'zabbix'
[root@linux-proxy tools]# mysql -uroot -pzabbix
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.1.73 Source distribution
 
Copyright (c) 2000, 2013, 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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)
 
mysql>

  

创建zabbix_proxy库,并授权zabbix用户,导入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@linux-proxy tools]# rpm -ql zabbix-proxy-mysql
/usr/sbin/zabbix_proxy_mysql
/usr/share/doc/zabbix-proxy-mysql-2.4.8
/usr/share/doc/zabbix-proxy-mysql-2.4.8/create
/usr/share/doc/zabbix-proxy-mysql-2.4.8/create/schema.sql
[root@linux-proxy tools]# /usr/bin/mysqladmin -uroot password 'zabbix'
/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
[root@linux-proxy tools]# mysql -uroot -pzabbix
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.1.73 Source distribution
 
Copyright (c) 2000, 2013, 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_proxy character set utf8;
Query OK, 1 row affected (0.00 sec)
 
mysql> grant all on zabbix_proxy.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
 
mysql> use zabbix_proxy;
Database changed
mysql> source  /usr/share/doc/zabbix-proxy-mysql-2.4.8/create/schema.sql
Query OK, 0 rows affected (0.01 sec)
 
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

  

修改proxy配置文件

1
[root@linux-proxy tools]# vim /etc/zabbix/zabbix_proxy.conf

看到如下注释,proxy也可以运行在Active和Passtive模式下,工作中主要还是运行在Active模式下

这里虽然默认是0,最好是取消注释,下面是Zabbix Server的地址

下面这里是Zabbix Server的端口,默认就是10051,不用更改,下面是proxy的名称,这里不要和别的proxy以及agent重名了。
 

DBHost和DBName都没变,不用修改

 

 用户名和密码。

检查配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@linux-proxy tools]# vim /etc/zabbix/zabbix_proxy.conf
[root@linux-proxy tools]# grep '^[a-Z]'  /etc/zabbix/zabbix_proxy.conf
ProxyMode=0
Server=10.0.1.161
Hostname=node3-proxy
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_proxy.pid
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=zabbix
DBSocket=/var/lib/mysql/mysql.sock
ExternalScripts=/usr/lib/zabbix/externalscripts
[root@linux-proxy tools]#

  

 启动服务,检查监听,看到proxy使用的是10051端口
1
2
3
4
5
6
7
8
9
10
11
[root@linux-proxy tools]# /etc/init.d/zabbix-proxy start
Starting Zabbix proxy:                                     [  OK  ]
[root@linux-proxy tools]# 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:22                  0.0.0.0:*                   LISTEN      2076/sshd          
tcp        0      0 0.0.0.0:10051               0.0.0.0:*                   LISTEN      13310/zabbix_proxy 
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      13219/mysqld       
tcp        0      0 :::22                       :::*                        LISTEN      2076/sshd          
tcp        0      0 :::10051                    :::*                        LISTEN      13310/zabbix_proxy 
[root@linux-proxy tools]#

  

接下来在zabbix-server上加上这个proxy节点

生产中最好把描述写上,方便别人

接下来类似正常添加主机,先把下面的删除了

接下来把node2加进去,让proxy监控,和一般加主机没太多区别

下面这里要选择proxy

 

先别着急add,模板这里也要改。改成如下

 添加完毕,如下

还需要把node2的指向改成proxy

1
[root@linux-node2 ~]# vim /etc/zabbix/zabbix_agentd.conf

下面改成proxy地址,因为它要把数据发给proxy

重启agent

1
2
3
4
[root@linux-node2 ~]# /etc/init.d/zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                     [  OK  ]
[root@linux-node2 ~]#

  

配置的一个小插曲
网页上加入对linux-node2.example.com 主机的监控,Zabbix Proxy必须能解析node2的主机名。如果解析不了,会报如下错误
1
2
3
4
5
6
7
8
9
10
11
[root@linux-proxy tools]# tail -f /var/log/zabbix/zabbix_proxy.log
 13537:20170315:225713.912 proxy #17 started [http poller #1]
 13542:20170315:225713.918 proxy #22 started [history syncer #4]
 13531:20170315:225713.918 proxy #11 started [trapper #2]
 13543:20170315:225713.918 proxy #23 started [self-monitoring #1]
 13532:20170315:225713.918 proxy #12 started [trapper #3]
 13528:20170315:225713.919 proxy #8 started [poller #5]
 13533:20170315:225713.922 proxy #13 started [trapper #4]
 13538:20170315:225713.941 proxy #18 started [discoverer #1]
 13520:20170315:225813.966 sending heartbeat message to server failed: error:"negative response: "failed"", info:"proxy "linux-proxy.example.com" not found"
 13534:20170315:225858.853 cannot send list of active checks to [10.0.1.162]: host [linux-node2.example.com] not found

  

下面是正常情况下的日志,Proxy从Server那边获取数据,然后接受node2的数据,如果解析不了node2的主机名,就会报上面错误
1
2
3
4
5
6
7
8
9
10
11
[root@linux-proxy tools]# tail -f /var/log/zabbix/zabbix_proxy.log
 13638:20170315:230149.414 proxy #17 started [http poller #1]
 13642:20170315:230149.415 proxy #21 started [history syncer #3]
 13634:20170315:230149.415 proxy #13 started [trapper #4]
 13637:20170315:230149.420 proxy #16 started [housekeeper #1]
 13641:20170315:230149.420 proxy #20 started [history syncer #2]
 13633:20170315:230149.424 proxy #12 started [trapper #3]
 13643:20170315:230149.426 proxy #22 started [history syncer #4]
 13635:20170315:230149.431 proxy #14 started [trapper #5]
 13639:20170315:230149.448 proxy #18 started [discoverer #1]
 13620:20170315:230149.453 received configuration data from server, datalen 7423

  

 另外proxy的配置文件,这里可以随便写,但是要有意义,还不能和别的重名

 网页这里配置的proxy名字也要对应

 
 
 

Zabbox自动化监控---自动注册


自动化监控分为:
agent自动注册
server端自动发现
通过zabbix api方式插入数据(比如从cmdb读取资产里的主机,然后通过Zabbix的api插入Zabbix数据库)

 
 
 自动注册肯定运行在主动模式下了
页面上删除机器,使用自动注册让它被监控
更改agent配置
 

下面的163结尾的地址是proxy的地址
 

hostname肯定是唯一的

1、自动注册
下面这个类似角色,模板
下面是你的主机元数据,通过获取agent端的元数据,可以提取关键字,然后关联相应的模板。这里不用修改

 
system.uname是什么呢,作用是什么呢,我这metadata是通过这个监控项获取,你不用设置

通过zabbix_get 获取值下面,类似uname -a的输出
看到有Linux,server端就给你加Linux模板
1
2
[root@linux-node1 ~]# zabbix_get -s 10.0.1.161 -k system.uname
Linux linux-node1.example.com 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64
就改了上面这一个
1
2
3
4
[root@linux-node2 ~]# /etc/init.d/zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                     [  OK  ]
[root@linux-node2 ~]#

  

接下来web页面配置
配置一个事件,很少有人看到事件源自哪里
选择自动注册,这样再选择create action
 

条件,因为那个zabbix连在proxy上的
首先你那个agent主机是连在proxy上的,其次你的matedata类似Linux

 
就是下面这种
1
2
[root@linux-node1 ~]# zabbix_get -s 10.0.1.161 -k system.uname
Linux linux-node1.example.com 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64

这两个条件
注意你的条件是a and b,operation 表示你想让它干什么。添加这台主机,然后添加主机组,再link一个模板

创建完毕,等着,一会就出现了发现的主机

 

一会出来了
你要是觉得慢,可以重启下agent,agent第一次起来就去请求数据了
检查,已经自动加入到组里了

已经自动link上模板了

 
 
Zabbox自动化监控---自动发现

 
这次不会用到Zabbix proxy,是Zabbix server主动扫描IP段,继续删除这台机器

删除完毕后action这里自动注册关闭了,防止干扰下面的实验,你以为成功了,其实是它的功劳

接下来不使用proxy了
使用discovery,你可以配置一下扫描一个ip段,扫描到之后把它加进来
先改成被动模式,node的agent.conf改成如下,server的地址

StartAgents改成3

下面这里改成默认的127.0.0.1

 
其余的不用管了
1
2
3
4
5
6
7
8
9
10
11
12
[root@linux-node2 ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.1.161
StartAgents=3
ServerActive=127.0.0.1
Hostname=linux-node2.example.com
HostMetadataItem=system.uname
Include=/etc/zabbix/zabbix_agentd.d/
UserParameter=login-user,uptime | awk -F ' '  '{print $4}'
[root@linux-node2 ~]#

  

以上就是改成被动模式,启用监听端口,连上server
1
2
3
4
[root@linux-node2 ~]# /etc/init.d/zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                     [  OK  ]
[root@linux-node2 ~]#
 
discovery默认有一个,点开

 
IP range小点,不然等待所有主机超时,慢,因为做实验,所以无所谓
以IP地址为标识
勾上enabled

这时候需要创建action,注意右边

默认有一个是关闭的,在它的基础上改

默认的这些都不用改

operation这里添加add host

然后点击右边的启用

看到这里又自动发现了

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

Zabbix api


对于以上两种方式,有些人都不选,倾向于使用第三种:使用zabbix api加上这个监控
在把这台机器删除了,然后discovery和自动注册的都关闭了
再换一种方式把它加进去,zabbix api两个作用
1、管理zabbix
2、查询一些数,把一些zabbix报警的图形一块发邮件
它支持很多方法

api的配置,在httpd.conf目录下。如下编辑zabbix.conf

1
[root@linux-node1 ~]# vim /etc/httpd/conf.d/zabbix.conf

接口文件在如下目录下
1
2
3
4
5
6
[root@linux-node1 zabbix]# cd /usr/share/zabbix/
[root@linux-node1 zabbix]# ls api_jsonrpc.php
api_jsonrpc.php
[root@linux-node1 zabbix]# ls api_jsonrpc.php -l
-rw-r--r-- 1 root root 2342 Apr 20  2016 api_jsonrpc.php
[root@linux-node1 zabbix]#

可以看到,首先它是个api,传输模式是rpc的,传输格式是json的
既然是api,那肯定有验证,给api发用户名密码,得返回token吧
后面拿这个token就可以继续请求了,和openstack类似
打开文档看
https://www.zabbix.com/documentation/2.4/manual/api/reference
第一步,因为涉及登录,找用户相关的

Authenticate a user.
Request:

1
2
3
4
5
6
7
8
9
{
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "Admin",
        "password": "zabbix"
    },
    "id": 1
}

Response:

1
2
3
4
5
{
    "jsonrpc": "2.0",
    "result": "0424bd59b807674191e7d77572075f33",
    "id": 1
}

  

返回的这个就是要的sessionid,后面的请求带着session就可了

通过curl访问

-s 静默
-X POST
-H 接类型
-d 接内容,用单引号引起来

粘贴到命令行上,回车后返回一串值
1
2
3
4
5
6
7
8
9
10
11
12
[root@linux-node2 ~]# curl  -s  -X  POST   -H  'Content-Type:application/json'  -d '
{
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "Admin",
        "password": "zabbix"
    },
    "id": 1
}'  http://10.0.1.161/zabbix/api_jsonrpc.php
{"jsonrpc":"2.0","result":"5733cec620a75d1f7e2ebcf725c7ccec","id":1}[root@linux-node2 ~]#
[root@linux-node2 ~]#

看着不舒服,给它处理下,调用python的工具处理下,命令如下

1
2
3
4
5
6
7
8
9
10
11
curl  -s  -X  POST   -H  'Content-Type:application/json'  -d '
 
{
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "Admin",
        "password": "zabbix"
    },
    "id": 1
}'  http://10.0.1.161/zabbix/api_jsonrpc.php |python -mjson.tool

  

执行如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@linux-node2 ~]# curl  -s  -X  POST   -H  'Content-Type:application/json'  -d '
>
> {
>     "jsonrpc": "2.0",
>     "method": "user.login",
>     "params": {
>         "user": "Admin",
>         "password": "zabbix"
>     },
>     "id": 1
> }'  http://10.0.1.161/zabbix/api_jsonrpc.php |python -mjson.tool
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": "d05f9fa13c8b182d61e462b8aaded670"
}
[root@linux-node2 ~]#

  

上面为什么要设置id,因为可能又多个请求,给不同的会话设置不同的id
你才知道这个是你的
把这个字符串记录下来

d05f9fa13c8b182d61e462b8aaded670

你请求的时候还可以加个下面userdata为true,这样还能返回用户信息

命令如下

1
2
3
4
5
6
7
8
9
10
11
curl  -s  -X  POST   -H  'Content-Type:application/json'  -d '
{
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "Admin",
        "password": "zabbix",
        "userData": true
    },
    "id": 1
}'  http://10.0.1.161/zabbix/api_jsonrpc.php |python -mjson.tool

执行如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@linux-node2 ~]# curl  -s  -X  POST   -H  'Content-Type:application/json'  -d '
> {
>     "jsonrpc": "2.0",
>     "method": "user.login",
>     "params": {
>         "user": "Admin",
>         "password": "zabbix",
>         "userData": true
>     },
>     "id": 1
> }'  http://10.0.1.161/zabbix/api_jsonrpc.php |python -mjson.tool
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": {
        "alias": "Admin",
        "attempt_clock": "0",
        "attempt_failed": "0",
        "attempt_ip": "",
        "autologin": "1",
        "autologout": "0",
        "debug_mode": false,
        "gui_access": "0",
        "lang": "en_GB",
        "name": "Zabbix",
        "refresh": "30",
        "rows_per_page": "50",
        "sessionid": "dbfdc9c932d15760f0ed05bb5955511b",
        "surname": "Administrator",
        "theme": "default",
        "type": "3",
        "url": "",
        "userid": "1",
        "userip": "10.0.1.162"
    }
}
[root@linux-node2 ~]#

  

接下来获取监控的主机有哪些

https://www.zabbix.com/documentation/2.4/manual/api/reference/user/get

找一个简单的,只获取hostid,注意auth是sessionid

1
2
3
4
5
6
7
8
9
10
curl  -s  -X  POST   -H  'Content-Type:application/json'  -d '
{
    "jsonrpc": "2.0",
    "method": "host.get",
    "params": {
        "output": ["hostid"]      
    },
    "auth": "dbfdc9c932d15760f0ed05bb5955511b",
    "id": 2
} '   http://10.0.1.161/zabbix/api_jsonrpc.php |python -mjson.tool

执行结果如下,hostid是10084

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@linux-node2 ~]# curl  -s  -X  POST   -H  'Content-Type:application/json'  -d '
> {
>     "jsonrpc": "2.0",
>     "method": "host.get",
>     "params": {
>         "output": ["hostid"]      
>     },
>     "auth": "dbfdc9c932d15760f0ed05bb5955511b",
>     "id": 2
> } '   http://10.0.1.161/zabbix/api_jsonrpc.php |python -mjson.tool
{
    "id": 2,
    "jsonrpc": "2.0",
    "result": [
        {
            "hostid": "10084"
        }
    ]
}
[root@linux-node2 ~]#

 

hostid就是下面这里的

把hostid改成host看看是否返回主机名
1
2
3
4
5
6
7
8
9
10
curl  -s  -X  POST   -H  'Content-Type:application/json'  -d '
{
    "jsonrpc": "2.0",
    "method": "host.get",
    "params": {
        "output": ["host"]      
    },
    "auth": "dbfdc9c932d15760f0ed05bb5955511b",
    "id": 2
} '   http://10.0.1.161/zabbix/api_jsonrpc.php |python -mjson.tool

执行结果如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@linux-node2 ~]# curl  -s  -X  POST   -H  'Content-Type:application/json'  -d '
> {
>     "jsonrpc": "2.0",
>     "method": "host.get",
>     "params": {
>         "output": ["host"]      
>     },
>     "auth": "dbfdc9c932d15760f0ed05bb5955511b",
>     "id": 2
> } '   http://10.0.1.161/zabbix/api_jsonrpc.php |python -mjson.tool
{
    "id": 2,
    "jsonrpc": "2.0",
    "result": [
        {
            "host": "Zabbix server",
            "hostid": "10084"
        }
    ]
}
[root@linux-node2 ~]#

  

 

也可以判断它是否存在

接下来使用api方式添加被监控主机

https://www.zabbix.com/documentation/2.4/manual/api/reference/host/create

创建的时候可以指定模板,以及主机组

在官网里看到实例如下,添加主机的时候可以指定模板,主机组,资产

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
        "host": "Linux server",
        "interfaces": [
            {
                "type": 1,
                "main": 1,
                "useip": 1,
                "ip": "192.168.3.1",
                "dns": "",
                "port": "10050"
            }
        ],
        "groups": [
            {
                "groupid": "50"
            }
        ],
        "templates": [
            {
                "templateid": "20045"
            }
        ],
        "inventory_mode": 0,
        "inventory": {
            "macaddress_a": "01234",
            "macaddress_b": "56768"
        }
    },
    "auth": "038e1d7b1735c6a5436ee9eae095879e",
    "id": 1
}

查看linux servers这个主机组,它的组id是2

再找一个模板id,看到模板id是10001

先获取授权的sessionid

1
2
3
4
5
6
7
8
9
10
11
curl  -s  -X  POST   -H  'Content-Type:application/json'  -d '
  
{                   
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "Admin",
        "password": "zabbix"
    },                   
    "id": 1              
}'  http://10.0.1.161/zabbix/api_jsonrpc.php |python -mjson.tool

根据返回的sessionid来创建主机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@linux-node2 ~]# curl  -s  -X  POST   -H  'Content-Type:application/json'  -d '
  
{                   
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "Admin",
        "password": "zabbix"
    },                   
    "id": 1              
}'  http://10.0.1.161/zabbix/api_jsonrpc.php |python -mjson.tool
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": "4c0999123f2da1b09b6a079c02a363ad"
}
[root@linux-node2 ~]#

  

 

执行命令如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
curl  -s  -X  POST   -H  'Content-Type:application/json'  -d '
{
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
        "host": "Linux server",
        "interfaces": [
            {
                "type": 1,
                "main": 1,
                "useip": 1,
                "ip": "10.0.1.162",
                "dns": "",
                "port": "10050"
            }
        ],
        "groups": [
            {
                "groupid": "2"
            }
        ],
        "templates": [
            {
                "templateid": "10001"
            }
        ]
    },
    "id": 1,
    "auth": "4c0999123f2da1b09b6a079c02a363ad"
}'  http://10.0.1.161/zabbix/api_jsonrpc.php |python -mjson.tool

  

执行结果如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[root@linux-node2 ~]# curl  -s  -X  POST   -H  'Content-Type:application/json'  -d '
> {
>     "jsonrpc": "2.0",
>     "method": "host.create",
>     "params": {
>         "host": "Linux server",
>         "interfaces": [
>             {
>                 "type": 1,
>                 "main": 1,
>                 "useip": 1,
>                 "ip": "10.0.1.162",
>                 "dns": "",
>                 "port": "10050"
>             }
>         ],
>         "groups": [
>             {
>                 "groupid": "2"
>             }
>         ],
>         "templates": [
>             {
>                 "templateid": "10001"
>             }
>         ]
>     },
>     "id": 1,
>     "auth": "4c0999123f2da1b09b6a079c02a363ad"
> }'  http://10.0.1.161/zabbix/api_jsonrpc.php |python -mjson.tool
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": {
        "hostids": [
            "10116"
        ]
    }
}
[root@linux-node2 ~]#

  

创建成功

点开看看

模板也自动加上了

学习zabbix(五)的更多相关文章

  1. 从零开始学习jQuery (五) 事件与事件对象

    本系列文章导航 从零开始学习jQuery (五) 事件与事件对象 一.摘要 事件是脚本编程的灵魂. 所以本章内容也是jQuery学习的重点. 本文将对jQuery中的事件处理以及事件对象进行详细的讲解 ...

  2. 前端学习 第五弹: CSS (一)

    前端学习 第五弹: CSS (一) 创建css: <link rel="stylesheet" type="text/css" href="my ...

  3. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

  4. Android Animation学习(五) ApiDemos解析:容器布局动画 LayoutTransition

    Android Animation学习(五) ApiDemos解析:容器布局动画 LayoutTransition Property animation系统还提供了对ViewGroup中的View改变 ...

  5. 六、Android学习第五天——Handler的使用(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 六.Android学习第五天——Handler的使用 注意:有很多功能是不 ...

  6. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  7. java之jvm学习笔记五(实践写自己的类装载器)

    java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...

  8. 文本分类学习 (五) 机器学习SVM的前奏-特征提取(卡方检验续集)

    前言: 上一篇比较详细的介绍了卡方检验和卡方分布.这篇我们就实际操刀,找到一些训练集,正所谓纸上得来终觉浅,绝知此事要躬行.然而我在躬行的时候,发现了卡方检验对于文本分类来说应该把公式再变形一般,那样 ...

  9. Learning ROS for Robotics Programming Second Edition学习笔记(五) indigo computer vision

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  10. scrapy爬虫学习系列五:图片的抓取和下载

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

随机推荐

  1. 安装python和pycharm,以及常见安装问题

    目录 安装python 输入第一个python程序 安装python文本编辑器pycharm 执行main.py文件出现的问题 python编码规范 python是当前很常用的一门语言了,和Java, ...

  2. Weblogic补丁升级常见问题

    转至:https://blog.csdn.net/weixin_44659716/article/details/106804177 常用企业级版本:Weblogic 11g(weblogic10.3 ...

  3. JAVA——转义字符

    目录 1.Java转义字符 2.Java中的注释 2.1Java 中的注释类型 2.2文档注释 3.Java代码规范 4.Java开发注意事项和细节说明 1.Java转义字符 在控制台,输入 tab ...

  4. Python中的dotenv的详细用法

    最简单和最常见的用法是在应用程序启动时调用load_dotenv,从当前目录或其父目录中的.env文件或指定的路径加载环境变量,然后你可以调用os.getenv提供的与环境相关的方法. .env 文件 ...

  5. phpstrom配置Xdebug

    采用的是PhpStrom+Xdebug+QQ浏览器(其他浏览器也可以,个人喜好) 1.下载适合的Xdebug插件 下载地址https://xdebug.org/download.php 不知道选用哪个 ...

  6. CSS样式下划线

    样式之文字下划线 第一 text-decoration: underline; 缺点是不好修改颜色 不要修改下划线的位置,优点就是一行代码解决 可以使用line-height: 20px; 也能调整位 ...

  7. mysql使用group by分组时出现错误ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and

    问题: 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ...

  8. python 绘图介绍

    1. python 绘图介绍 2. 函数 import numpy as np import matplotlib.pyplot as plt t = np.arange(0.0, 3.0, 0.01 ...

  9. Microsoft .NET Framework 远程执行代码漏洞

    受影响系统:Microsoft .NET Framework 4.8Microsoft .NET Framework 4.7.2Microsoft .NET Framework 4.7.1Micros ...

  10. 【Jenkins】基于Windows系统安装Jenkins

    镜像下载.域名解析.时间同步请点击阿里云开源镜像站 一.Jenkins简介 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. Jenkins 支持各种 ...