天天看點

zabbix 表結構和應用

啃别人的骨頭

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>&gt;hostid</code><code>-</code><code>&gt;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>&gt;hosts_groups.hostid</code>

<code>hosts_groups.groupid</code><code>-</code><code>&gt;groups.groupid</code>

<code>hosts.hostid</code><code>-</code><code>&gt;items.hostid</code>

<code>items.itemid</code><code>-</code><code>&gt;functions.itemid</code>

<code>functions.triggerid</code><code>-</code><code>&gt;triggers.triggerid</code>

<code>triggers.triggerid</code><code>-</code><code>&gt;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}&gt;</code><code>100</code> <code>意味着itemid(</code><code>10019</code><code>)的values&gt;</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)) &lt; </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>) &lt; </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,如需轉載請自行聯系原作者