啃别人的骨头
https://www.xiaomastack.com/2014/07/03/zabbixdbtable/
http://www.furion.info/623.html?utm_source=tuicool&utm_medium=referral
1.zabbix表关系
2.hosts
hostid,host(包括模板)
hostid:每台主机唯一id标识;host:主机名;status:主机状态标识(为0则是你要找的主机,3表示的貌似是模板主机)
3.groups
groupid,name
4.hosts_groups
hosts,groups
5.items
hostid,itemid
items表则记录着没台主机所有图形项目(比如一个网卡图,有流入和流出两根线,则这张图就有两个item)。字段说明,itemid是每个绘图项目唯一标识,hostid每个主机的标识,name每个item的名字,delay数据采集间隔,history历史数据保存时间,status标识item的状态(0表示正常显示的item),units保存item的单位
6.graphs_items
gitemid,graphid,itemid
关联着每幅图的item和图形id,简单的说就是告诉我们每台主机有多少幅图及每幅图上有哪些item
7.graphs
graphid
8.history,history_text,history_uint
itemid
9.trends,trends_uint
分割线
-------------------------------------------------
10.actions
actionid,
actions表记录了当触发器触发时,需要采用的动作
11.alerts
alerts 表保存了历史的告警事件,可以从这个表里面去做一些统计分析,例如某个部门、 某人、某类时间的告警统计,以及更深入的故障发生、恢复时间,看你想怎么用了。
alertid,actionid,eventid,userid
12.functions
itemid,triggerid
function 表时非常重要的一个表了,记录了trigger中使用的表达式,例如max、last、nodata等函数。
13.trigger_discovery
triggerid,parent_triggerid
案例
zabbix如何批量更新错误图表 2014/06
http://www.furion.info/654.html
graphs_sql = " select graphid , name from graphs where name like '%端口队列发包量' "
#获取graphid
items_sql = " select i.hostid ,g.gitemid,i.itemid ,i.description from items as i left join graphs_items g on i.itemid = g.itemid where g.graphid= %s" % graphid
#获取hostid,itemid
new_itemid_sql = "select hostid ,itemid,description from items where hostid=%d and description='%s'" %(hostid, description_new)
#获取正确的itemid
sql_update = "update graphs_items set itemid=%d where graphid = %d and gitemid=%d " %(itemid_new,graphid, gitemid)
#利用更新错的数据,更新正确的itemid
四个sql语句搞定
2.zabbix批量更新主机关联的模板
http://www.furion.info/703.html
get_host_template
sql = 'select ht.templateid from hosts_templates ht, hosts h where h.hostid = ht.hostid and h.hostid=%s' %(hostid)
或者template.get
涉及两个表 hosts_templates和hosts
3.19vs30,其实items都会有,这样的查询是错误的。
select t1.* from hosts_templates t1 where t1.hostid in(
select ii.hostid from items ii where ii.`name` like '%GC%'
and ii.hostid IN (select htt.hostid from hosts_templates htt where htt.templateid='10143') GROUP BY ii.hostid
) GROUP BY t1.hostid
比如你想查找出那些有应用模板但是没有items的主机,那些是有故障的
找出hostid
select htt.hostid from hosts_templates htt where htt.templateid='10143' and htt.hostid not in (
select ii.hostid from items ii where ii.`name` like '%tomcat%'
) group by htt.hostid
2.然后与hosts表连接
select * from hosts kk where kk.hostid in (
)
4.查询不支持的项目select status,itemid,hostid,name,key_ from items where status=1;
总之,zabbix表关系设计的很好。多余的字段也会显示是否故障,比如类似status字段。
问题
1.自动发现规则的表是哪张
2.到主机,可以定位哪些主机的值更新存在异常(比unreachable的报警更加准确)
更新
<code>zabbix 表结构</code>
<code>hosts</code><code>-</code><code>>hostid</code><code>-</code><code>>templateid</code>
<code>hosts表</code>
<code>hostid host </code><code>1v1</code><code>关系</code>
<code>hosts_templates</code>
<code>hostid templateid 多v1关系</code>
<code>alerts表是记录已经发送邮件的记录</code>
<code>所以界面上是从哪个表取出来的。</code>
<code>events</code>
<code>SELECT </code><code>*</code> <code>FROM information_schema.`KEY_COLUMN_USAGE`</code>
<code>WHERE referenced_table_name</code><code>=</code><code>'events'</code>
<code>因为zabbix有很多外键,所以说这个设计很不错。尤其要注意子表与主表的关联,比如events</code>
<code>所以分析zabbix表结构,首先从外键看起,谁的外键多,谁就是主表,那么就是源头了。</code>
<code>events acknowledged</code>
<code>select </code><code>*</code> <code>from</code> <code>events where eventid</code><code>=</code><code>'4516146'</code><code>;</code>
<code>eventid source </code><code>object</code> <code>objectid clock value acknowledged ns</code>
<code>4516146</code> <code>0</code> <code>0</code> <code>13791</code> <code>1470815425</code> <code>1</code> <code>1</code> <code>125453205</code>
<code>5</code> <code>3</code> <code>0</code> <code>13477</code> <code>1465962284</code> <code>1</code> <code>0</code> <code>97450859</code>
<code>hosts.hostid</code><code>-</code><code>>hosts_groups.hostid</code>
<code>hosts_groups.groupid</code><code>-</code><code>>groups.groupid</code>
<code>hosts.hostid</code><code>-</code><code>>items.hostid</code>
<code>items.itemid</code><code>-</code><code>>functions.itemid</code>
<code>functions.triggerid</code><code>-</code><code>>triggers.triggerid</code>
<code>triggers.triggerid</code><code>-</code><code>>events.objectid</code>
<code>functionid itemid triggerid function parameter</code>
<code>10199</code> <code>10019</code> <code>10016</code> <code>diff </code><code>0</code>
<code>{functionid}></code><code>100</code> <code>意味着itemid(</code><code>10019</code><code>)的values></code><code>100</code>
<code>意思就是items的值关联function方式,然后triggers是否为</code><code>1</code><code>还是</code><code>0</code><code>(正常)</code>
<code>sql语法</code><code>1</code><code>:</code>
<code>select ht.templateid </code><code>from</code> <code>hosts_templates ht, hosts h where h.hostid </code><code>=</code> <code>ht.hostid</code>
<code>-</code><code>-</code> <code>and</code> <code>h.hostid </code><code>=</code> <code>'10084'</code><code>;</code>
<code>解析 hosts的hostid去匹配hosts_templates,所以记录总数为hosts_templates,有重复.</code>
<code>sql语法</code><code>2</code><code>: 找出那些有应用模板但是没有items的主机,那些是有故障的</code>
<code>select </code><code>*</code> <code>from</code> <code>hosts where hostid </code><code>in</code>
<code>(</code>
<code>SELECT</code>
<code> </code><code>htt.hostid</code>
<code>FROM</code>
<code> </code><code>hosts_templates htt</code>
<code>WHERE</code>
<code> </code><code>htt.templateid </code><code>=</code> <code>'10143'</code>
<code>AND htt.hostid NOT IN (</code>
<code> </code><code>SELECT</code>
<code> </code><code>ii.hostid</code>
<code> </code><code>FROM</code>
<code> </code><code>items ii</code>
<code> </code><code>WHERE</code>
<code> </code><code>ii.`name` LIKE </code><code>'%tomcat%'</code>
<code> </code><code>AND ii.hostid IN (</code>
<code> </code><code>SELECT</code>
<code> </code><code>htt.hostid</code>
<code> </code><code>FROM</code>
<code> </code><code>hosts_templates htt</code>
<code> </code><code>WHERE</code>
<code> </code><code>htt.templateid </code><code>=</code> <code>'10143'</code>
<code> </code><code>)</code>
<code> </code><code>GROUP BY</code>
<code>)</code>
<code>GROUP BY</code>
<code>sql语法</code><code>3</code><code>:查看items中停用的项目</code>
<code> </code><code>b. HOST,</code>
<code> </code><code>a.itemid,</code>
<code> </code><code>a.hostid,</code>
<code> </code><code>a. NAME,</code>
<code> </code><code>a.key_</code>
<code> </code><code>items a,</code>
<code> </code><code>HOSTS b</code>
<code> </code><code>b.hostid </code><code>=</code> <code>a.hostid</code>
<code>AND a. STATUS </code><code>=</code> <code>1</code>
<code>sql语法</code><code>4</code><code>:</code>
<code>create table tmp1 as</code>
<code> </code><code>(SELECT</code>
<code> </code><code>`hosts`.`host`,</code>
<code> </code><code>`triggers`.triggerid,</code>
<code> </code><code>`triggers`.description,</code>
<code> </code><code>`triggers`.priority,</code>
<code> </code><code>`events`.`value`,</code>
<code> </code><code>FROM_UNIXTIME(`events`.clock) time</code>
<code> </code><code>`hosts`,</code>
<code> </code><code>`triggers`,</code>
<code> </code><code>`events`,</code>
<code> </code><code>`items`,</code>
<code> </code><code>`functions`,</code>
<code> </code><code>`groups`,</code>
<code> </code><code>`hosts_groups`</code>
<code> </code><code>`hosts`.hostid </code><code>=</code> <code>`hosts_groups`.hostid</code>
<code> </code><code>AND `hosts_groups`.groupid </code><code>=</code> <code>`groups`.groupid</code>
<code> </code><code>AND `triggers`.triggerid </code><code>=</code> <code>`events`.objectid</code>
<code> </code><code>AND `hosts`.hostid </code><code>=</code> <code>`items`.hostid</code>
<code> </code><code>AND `items`.itemid </code><code>=</code> <code>`functions`.itemid</code>
<code> </code><code>AND `functions`.triggerid </code><code>=</code> <code>`triggers`.triggerid);</code>
<code>-</code><code>-</code><code>告警数据 alter表</code>
<code>select FROM_UNIXTIME(clock),sendto,`subject` </code><code>from</code> <code>alerts</code>
<code>-</code><code>-</code> <code>where `subject` like </code><code>'%磁盘%'</code> <code>and</code>
<code>where DATE_FORMAT(FROM_UNIXTIME(clock),</code><code>'%Y-%m-%d'</code><code>) </code><code>=</code> <code>DATE_FORMAT(NOW(),</code><code>'%Y-%m-%d'</code><code>);</code>
<code>select FROM_UNIXTIME(clock),hh.</code><code>*</code> <code>from</code> <code>alerts hh where status !</code><code>=</code> <code>1</code>
<code>and</code> <code>TO_DAYS(NOW()) </code><code>-</code> <code>TO_DAYS(FROM_UNIXTIME(clock)) < </code><code>365</code><code>;</code>
<code>and</code> <code>DATE_FORMAT(NOW(),</code><code>'%Y-%m-%d'</code><code>) </code><code>-</code> <code>DATE_FORMAT(FROM_UNIXTIME(clock),</code><code>'%Y-%m-%d'</code><code>) < </code><code>30</code><code>;</code>
<code>select FROM_UNIXTIME(h.clock),h.subject,FROM_UNIXTIME(f.clock),f.</code><code>*</code> <code>from</code> <code>events f,</code>
<code>(select clock,`subject`,eventid </code><code>from</code> <code>alerts </code>
<code>where DATE_FORMAT(FROM_UNIXTIME(clock),</code><code>'%Y-%m-%d'</code><code>) </code><code>=</code> <code>DATE_FORMAT(NOW(),</code><code>'%Y-%m-%d'</code><code>)</code>
<code>) as h</code>
<code>where f.eventid </code><code>=</code> <code>h.eventid</code>
<code>(</code><code>32723</code>
<code>select </code><code>*</code> <code>from</code> <code>functions where itemid </code><code>=</code> <code>'32723'</code>
<code>15497</code>
<code>select </code><code>*</code> <code>from</code> <code>`triggers` where triggerid </code><code>=</code> <code>'15497'</code><code>;</code>
<code>select </code><code>*</code> <code>from</code> <code>`events`</code>
<code>select </code><code>1504618584</code>
<code>select from_unixtime(</code><code>1504618584</code><code>,</code><code>'%Y%m%d %H:%i:%S'</code><code>)) 得到的时间为</code><code>20170905</code> <code>21</code><code>:</code><code>36</code><code>:</code><code>24</code>
<code>select from_unixtime(tt.clock,</code><code>'%Y%m%d %H:%i:%S'</code><code>),tt.</code><code>*</code> <code>from</code> <code>events tt </code>
<code>where eventid </code><code>in</code> <code>(</code>
<code>select </code><code>*</code> <code>from</code> <code>alerts order by from_unixtime(clock,</code><code>'%Y%m%d %H:%i:%S'</code><code>) desc)</code>
<code>order by eventid desc limit </code><code>1</code><code>,</code><code>5000</code>
<code>hosts </code>
<code>hostid 是ip和模板</code>
<code>select i.itemid,h.host </code><code>from</code> <code>items i,hosts h where i.hostid</code><code>=</code><code>h.hostid </code><code>and</code> <code>h.host</code><code>=</code><code>'xxxx'</code> <code>and</code> <code>i.name </code><code>in</code> <code>(</code><code>'regionserver writeRequestsCount'</code><code>,</code><code>'regionserver requests'</code><code>);</code>
<code>详细步骤</code>
<code>select </code><code>*</code> <code>from</code> <code>hosts where host</code><code>=</code><code>'192.1.1.206'</code><code>; hostid</code>
<code>select </code><code>*</code> <code>from</code> <code>items where hostid</code><code>=</code><code>'10084'</code><code>;</code>
<code>select </code><code>*</code> <code>from</code> <code>items where hostid</code><code>=</code><code>'10084'</code> <code>and</code> <code>name like </code><code>'%war%'</code><code>; itemid</code>
<code>总体</code>
<code>hosts,items 联合查询itemid,然后通过itemid到history_unit查询更新记录</code>
<code>报警trigger条件,记录到triggers表中,然后符合条件的过滤到alerts,就会发送出去</code>
<code>主屏幕最近</code><code>20</code><code>个问题,表示的是获取到的值一直没有改变。去striggers查询</code>
<code>如果一直没发邮件出去,那么就会挂在web界面上,然后即使你action了,也不会去从数据库执行那套操作。就会一直挂着,除非你改变状态。</code>
<code>问题</code>
<code>1.</code><code>为什么在主屏幕上显示,而不是发送邮件。</code>
<code>triggers表,alters表没有数据</code>
<code>CREATE TABLE `triggers` (</code>
<code> </code><code>`triggerid` bigint(</code><code>20</code><code>) unsigned NOT NULL,</code>
<code> </code><code>`expression` varchar(</code><code>2048</code><code>) NOT NULL DEFAULT '',</code>
<code> </code><code>`description` varchar(</code><code>255</code><code>) NOT NULL DEFAULT '',</code>
<code> </code><code>`url` varchar(</code><code>255</code><code>) NOT NULL DEFAULT '',</code>
<code> </code><code>`status` </code><code>int</code><code>(</code><code>11</code><code>) NOT NULL DEFAULT </code><code>'0'</code><code>,</code>
<code> </code><code>`value` </code><code>int</code><code>(</code><code>11</code><code>) NOT NULL DEFAULT </code><code>'0'</code><code>,</code>
<code> </code><code>`priority` </code><code>int</code><code>(</code><code>11</code><code>) NOT NULL DEFAULT </code><code>'0'</code><code>,</code>
<code> </code><code>`lastchange` </code><code>int</code><code>(</code><code>11</code><code>) NOT NULL DEFAULT </code><code>'0'</code><code>,</code>
<code> </code><code>`comments` text NOT NULL,</code>
<code> </code><code>`error` varchar(</code><code>128</code><code>) NOT NULL DEFAULT '',</code>
<code> </code><code>`templateid` bigint(</code><code>20</code><code>) unsigned DEFAULT NULL,</code>
<code> </code><code>`</code><code>type</code><code>` </code><code>int</code><code>(</code><code>11</code><code>) NOT NULL DEFAULT </code><code>'0'</code><code>,</code>
<code> </code><code>`state` </code><code>int</code><code>(</code><code>11</code><code>) NOT NULL DEFAULT </code><code>'0'</code><code>,</code>
<code> </code><code>`flags` </code><code>int</code><code>(</code><code>11</code><code>) NOT NULL DEFAULT </code><code>'0'</code><code>,</code>
<code> </code><code>PRIMARY KEY (`triggerid`),</code>
<code> </code><code>KEY `triggers_1` (`status`),</code>
<code> </code><code>KEY `triggers_2` (`value`,`lastchange`),</code>
<code> </code><code>KEY `triggers_3` (`templateid`),</code>
<code> </code><code>CONSTRAINT `c_triggers_1` FOREIGN KEY (`templateid`) REFERENCES `triggers` (`triggerid`) ON DELETE CASCADE</code>
<code>) ENGINE</code><code>=</code><code>InnoDB DEFAULT CHARSET</code><code>=</code><code>utf8;</code>
本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1888611,如需转载请自行联系原作者