8.1
- hex內置函數直接將十進制數轉換成十六進制
把十六進制等其餘轉回十進制可使用eval 、
eval ('0x3d') 就能夠將16進制轉換成十進制
- 數據庫的集羣配置得在同一個網段?zabbix的主備使用的是代理模式,正常狀況下代理端指向主的數據庫,異常狀況能夠改變爲備數據庫,代理端能夠理解爲一個zabbix服務端
- 集合真是個好東西,快速進行兩個列表的比較,
- pymysql模塊中使用conn對象建立的cursor對象,能夠添加參數as_dict=true來輸出字典
- sql語錄的in判斷where id in(1,2,3,4)
- 集合中的元素不能是字典,字典是不能被hash的,
刪除列表中符合條件的某個元素,可使用l.index找出元素的位置,再pop索引位置刪除
8.2
- 整理了一天模板,思科路由器交換機模板通用,hp服務器使用ilo模板,已經集成到了hp snmpv2,有一些沒得須要參照mib文件實際添加。
8.3
- 又浪費了一個美好的週末,浪費了48小時,真是閒的蛋疼,也不知道培養啥興趣,另外哪兒託真好看。
- 有時候當下想不起來的東西,在某個瞬間就會思路通暢。
8.4
- 在參數的配置中,能拆分的儘可能拆分。
- django orm 模型的多對多關係,還有多個字段對應同一張表的時候出現的問題,詳情看django 的多對多。
- 模塊的抽象儘可能不要有啥聯繫
8.5
- Ubuntu真的難用
8.6
代碼的優化問題,像今天一共有十二條數據,每一個都要執行一次獲取結果傳值,使用了for便利了全部sql語句,就執行了12次,在數據庫中,每一個cursor對象都是寶貴的資源,不能這麼浪費。儘可能在一次查詢中拿出全部的數據,能夠拿出全部的條件,進行where xxx in (一個元祖,咱們的條件),在進行sql佔位匹配的時候,%s很差用,儘可能仍是用{}.foramat形式,並且in 後面的條件查詢只接受元祖類型,記得轉換格式,
當sql語句爲 "select * from user where name = %s"這種類型的時候,對%s進行填充的參數爲execute的第二個參數,
在使用cursor.execute(sqzl,佔位參數)
還有一個cursor.executemany方法,一次執行多個sql語句
條件如今作的是一個映射表,維護起來不方便,能夠考慮將其構形成一個數據庫表java
使用zabbix_trapper方式進行監控的時候,zabbix_sender需指定的參數有-z 主機ip -s主機名字 -k自定義key(只是一個傳值的形式鍵) -o 表示的是傳的真實值
對於多名字的監控像,像網絡鏈路這種的,一個NAME對應一個key,在建立自動發現規則的時候,設置爲zabbix_trapper方式,定義一個key,在後臺就可使用zabbixsender給這個key發送全部的宏 {#NAME}:xxx,這樣,這個{$NAME} 宏變量就能夠在監控項原型觸發器原型中使用了。python
更改完celery任務後,先在supervisorctl中關閉celery進程,刪除項目的celery-schedule文件,再重啓celery任務,mysql
- 在將solarwinds的告警信息映射到監控系統中時,
- 深度系統,真香
firefox瀏覽器挺好用,國內不限制,能夠各類端同步。linux
8.7
- mssql中的一個字段是uuid對象,直接在數據庫中存儲的數據是uuid值。取這個字段出來的時候是一個uuid對象。要獲取到存儲的uuid串能夠對對象使用str函數進行強轉換
- 各種監控產品邏輯都差很少,
- sys的argv是一個屬性,不是一個方法,不用加括號,返回的是一個參數列表,能夠做爲一個接收參數的橋樑,按下標進行取值
- os執行linux方法能夠用os.system會直接打印出命令執行的結果,他的返回值是一個執行狀態值,0表示執行成功,非0則失敗,若是不想要直接打印命令執行結果,可使用os.popen,也能夠執行命令,返回值有read方法。能夠得出執行結果,不過結果中自帶一個換行符,須要強制去除
- 深度系統能夠在配置文件中配置它的主題 usr
- 判斷文件是否存在的需求,想的用腳本的方式走,參數接收ip及文件名,一開始想的仍是在腳本中執行ssh連接到主機,再用os來判斷文件是否存在。 可是這樣還須要用戶名密碼,還得提變動申請。
換一種思路,由於使用的是外部檢查,腳本是放在server端的,就像在server端執行一條zabbix_get 配置zabbix的監控項vfs.file.exist[filename]來查找對應的文件,同樣,在腳本中執行這條命令就能夠。print他的返回值,就能夠在zabbix端收到相應的數據。
- 在使用自動發現監控項原型建立出的監控項,若是取消掉其中一個監控項,會有一個延遲刪除時間,在這段時間內,這個監控項仍是在的,只不事後面的有一個黃標,表示在延遲時間後刪除,也能夠手動刪除,
8.8
- zabbix 監控web頁面的key web.page.regex[ip,url路徑,port,對返回值可使用的正則表達式,容許輸出的內容] 相比較web.page.get[],後者只是去簡單的get頁面,拿到的時相應包,不作任何處理,因此仍是regex好用一點,有個問題就是get取到的響應包是302的重定向,爲啥
web.page.regex[127.0.0.1,/admin/,8080,"HTTP/ (.*) OK","\1"]
這樣就能夠提取出響應的狀態碼200
- 對於觸發器的配置,除了能夠正常的在頁面點選意外,還能夠手動的將兩個監控項進行搭配使用
正常的表達式 agent.ping <> 1 報警
手動的 表達式1 比較符 表達式2 ,將另外一個監控項的結果做爲另外一個監控項的判斷條件
- 對於py腳本,在文件頭申明解釋器路徑,相似於
#!/bin/bash
py的申明能夠是 #!/usr/bin/python3
也能夠從環境中獲取#!/usr/bin/env python3
建立完腳本後,也時須要受權,chmod +x xxxx.py 而後 ./ 腳本名執行。
- 對於邁普設備和思科設備的告警合併,邁普的sql語句查出來的正常ip值先存放一個cache,到了下次task執行獲取到正常ip值,將後取到的ip值跟先前cache裏存的正常ip值進行比較,這裏使用的set,採用集合的形式去作比較,上一次值中有的,下一次沒有,意味着這個ip值錯誤了,用a.difference(b),b.difference(a),兩次比較產生錯誤的ip數和回覆的ip數,再講這個錯誤ip數單獨存一份cache,專門對錯誤的ip進行統計,有報錯的就添加進去,有恢復的就剔除出去,最後再和思科的告警信息合併,就是最終呈現的告警信息。
- datetime.datetime.now()獲取的時當前日期,能夠直接對這個對象使用strftime('%Y%m%d')進行格式化輸出日期。
datetime.timedelta(days=1)是一個時間跨度對象,能夠跟now對象作加減,表示日期的先後跨度。
%Y表示的是4位年信息,%y表示的時2位年信息
src = "127.0.01"
dst = "172.0.0,1"
netstat -an|awk -v src=$src -v dst=$dst '/ESTABLISHED/{if ($4 == src && $5==dst){a=1}}END{if (a==1) {print 1} else {print 0}}
8.9
- 對於監控項的定時監控設置:默認的監控項沒有定時這個功能,只有一個自定義間隔時間,是設置週期的,需求是對於某個時間後的文件存在進行監控,能夠換個思路,在觸發器的設置中,有一個time函數,格式是
100000
時分秒 表明的是 十點零分零秒,觸發器表達式:{xxxxx.time()>100000} and {xxxx.last()=0}和管轄,配合另外的監控項 就能夠構造出在十點之後,某個監控項的最新值是0的時候就報警,就能夠完成定時的對監控項實現定時執行的效果,
觸發器還能夠設置依賴關係,一個觸發器依賴另外一個觸發器的觸發
- pyexcel_xlsx模塊挺好用的,函數save_data('xxx.xlsx',data)直接接受兩個參數,表格文件名,二維數組數據對象或者orderdict對象,
二維數組 [[列1的值,列2的值],[列1的值,列2的值],[列1的值,列2的值],]
這樣的sheet名是系統定的
orderdict對象 from collection import orderdict {'sheet1_name':[一個二維數組數據對象],'sheet2_name':[一個二維數組數據對象],}
這樣就能夠定義sheet名
- 對於代碼的健壯性,儘可能考慮報錯的場景,多用get,
8.12
- 中間變量用的太多會不會形成一些問題。
8.13
- 在部署項目的時候首先在家要把要用的包都下載好,由於在現場是不能連外網的。安裝好環境以後,就能夠部署軟件了。須要的mysql,redis,nginx均可以在114的repo上下載,若是沒有的話也須要提早準備。
- 由於新上的消息平臺跟原來的監控系統也有聯繫,因此在更新監控系統的時候,遵循操做手冊,先把全部涉及的項目先備份,而後替換要更換的文件。
由於監控系統主服務及celery和一些命令格式都是用supervisor來管理的進程,因此在用supervisor來啓動這些進程的時候,就打開日誌文件,以確保服務的正常啓動。當感受更新不穩定的時候,時刻準備將代碼退回到備份檔。由於supervisor有大概兩分鐘的重試時間,超過兩分鐘的話,若是服務不可用,立馬退回備份檔,以確保生產環境不受影響,而後查看日誌信息查錯再準備更新。
- 今天在上線消息平臺的時候,由於測試的那期間監控系統時沒有報錯的,當看到消息平臺半天沒動靜,覺得代碼出問題了,就給回退了,而後一直髮不出消息,這是一種對本身代碼的沒信心,而後就在那盲目的瞎找問題,浪費了不少時間,正確作法是,對本身的代碼邏輯清晰,知道哪兒在哪,即便是出了問題,首要是去查看日誌,並且之後在代碼中要對錯誤日誌的logging即便進行記錄,try except也要多用,這樣才能發現問題。即便排除
- 在監控系統發消息的攔截部分中,今天明明設置攔截了,可是沒有及時生效,也浪費了不少時間,莫名其妙的產生的bug,並且在send_msg中由於攔截了消息,進行消息轉發,可是在鏈接的close中沒有進行處理,在close進行了處理,接觸bug,
- supervisor的使用,由python編寫,安裝supervisor 用systemctl啓動supervisord.service服務,在/etc/supervisor.d/目錄下配置咱們的進程管理.conf文件,須要在/etc/supervisor.conf中的最後include中修改成 ./supervisor.d/*.conf
- zabbix中修改觸發器的時候,需注意觸發器的更新時間,不然立馬更新後使用的仍是先前的觸發器,會形成誤報警。
8.14
- 數據結構的優化是有很大空間能夠壓縮的,只要方法做對,瞬間能夠省去不少代碼,還均可以達到目的。
- 使用zabbix的api來建立虛擬主機可監控項觸發器,配合使用zabbix_sender方式能夠完成其餘業務的的告警集成到zabbix告警系統
- 今天將測試環境的監控系統告警發送轉移到消息平臺,測試環境的send_msg直接夯住了,沒找到緣由
8.15
- 更到生產環境,內心就是沒底,特別沒底,就怕出問題。
- 消息平臺運行成功,另外之後還要把代碼中的print去掉,不要遺漏
8.16
- 數據結構的拼接仍是個大問題,一個好的數據結構能夠省去不少的事情。更高效。
- 變量的申明,最好是見名知意的那種。
- dbeval很好用,還能夠生成表之間的ER關係圖譜
- 對於websocket,須要在consumer中建立生成數據的函數,而後在routing文件中建立相應branch的url
8.19
- 作客戶的poc測試,須要提早溝通好,須要的設備信息,須要使用的測試包,包括license,甚至是linux的鏡像源,當前咱們使用的是centos的7.4版本。全部能考慮到的地方都要準備好。
- 進行poc測試看poc手冊。
- 各個功能軟件的ip鏈接,須要把各自的hosts內容都配置好,要學會多利用日誌報錯來查看問題所在點。
8.20
- 使用pyinstaller進行py文件的打包處理。
- 在寫腳本的時候,健壯性是前提,對於可能取不到的值,能夠提早進行變量的申明,
- 今天在fping腳本的編碼中,個人想法是同一個腳本執行屢次而後分別取出想要的loss值,delay值,status值,可是這樣會很繁瑣,並且效率很低。奇哥的寫法是直接一次執行,全部結果都取到,而後構形成一個字典,將每一個值匹配一個key,在zabbix執行的時候,傳入一個key值,根據key值的不一樣來取出相應的值,
還有就是在配置userparamsters的時候,直接配置三個不通的監控項,依次取值,這個真的很強。
- 跟用戶溝通,須要明確需求,列出清單,一項一項的走。並且今天中午明明我把包放進文件夾了,到了客戶打開裏面居然是空的,還好沒有清空回收站,才恢復了,並且當時我沒有聲張,其實這個沒啥,想太多了,那時是能夠停下去拿到最新的包,不能去拿沒有把握的包去部署,此次是幸運恢復的是最新包,萬一錯了,那時間成本可能就划不來了。下次不能在再這樣了
- win7中打的包在2003,xp上不能使用,考慮用go來編譯一個客戶端。
8.21
- go的交叉編譯是一個很吊的東西,解決可不少的依賴,用go來編譯安裝包,依賴文件不像py那樣須要把整個py環境打進去,並且不存在win7打出的包xp和2003不能使用的狀況,go編譯出來的包,兼容性很強,跨平臺使用不成問題,
- fping在windows平臺和linux平臺中參數是不同的,顯示的結果也是不同的,在go中調用命令拿到的返回結果跟終端顯示也是不同的
- django2.x在url的設置中作了變化,再也不使用^ $來配置url,若是要使用正則匹配url,須要使用re_path,並且在path中,內置了幾個數據類型來進行url中的正則匹配。默認的就是str,若是要強制定義,使用
來正則匹配。
- go中的切片,字符,整形判斷概念忘了個差很少,代碼全靠百度,
- go程序的參數傳入,if判斷,swith case語法,編譯包的使用及參數調用。
- datetime.datetime.fromtimestampt(時間戳),直接轉成的日期對象能夠直接和mysql中自動添加datetime對象做比較,再也不像原來同樣還須要先進行時區的指定。
8.22
- 多使用cache中的數據來處理,在作dco報表的時候,event中的數據已經包含了想要的數據,可使用tag和分組group來進行分類,在作tag的時候,cache中包含了全部觸發器中的tag項,在cache中的顯示是一個大列表中包含的tag,
- 每次在變動代碼的時候注意備份,備份,備份,當要從備份中回覆某個文件的時候,使用cp,不要想固然的使用mv,當某個時候想要總體回遷的時候,你就會發現你忘了mv了哪一個文件了,到時候就哭吧。
- 使用zabbix sender發送數據,發出去的都是字符串數據,在zabbix中建立監控項原型的時候只要選擇好數據類型,就能夠顯示了,可是當返回的數據字符串內部包含的浮點型數據,整形就匹配不了了,就得使用浮點型來顯示數據了
8.23
- 能從內存中取數據是真的方便,減小查數據庫
- 對xls ,xlsx表格分別使用xlrd openpyxl方式能夠讀取數據,操做數據,
- zabbix的item對主機直接取是能夠拿到全部的數據的,包括主機建立的監控項和自動發現中監控項原型映射出來的監控項
- 25號才發現更新的代碼還有一處沒有完成改變,問題還挺大的,明天去更改下,真的是,之後只要有代碼變更就的記下來,否則過些日子就忘的一乾二淨了,還有天天的工做內容也得開始羅列清單了,腦子並不能記全部的東西
8.26
- 今天碰到一個列表裏包含多字典的數據結構,對列表遍歷取值,作條件判斷,當知足條件的最數據處理,而且從列表中remove刪除,可是在打印的時候卻沒有刪除,爲啥?
- 忽然要接手兩個項目,全新的練手,我了個去,亞歷山大,表面風平浪靜,實際上慌得一批啊
- django的後臺關聯模型的名稱展現須要定義__str__方法,
- 在go中修改文件權限,在windows中是沒有啥做用的,linux系列中直接chmod(文件名,權限碼 0777),go中有四種讀寫文件的方法
- 在zabbix彙總的userparamsters中配置的自定義監控項,當要對監控項進行傳值 的時候,可使用
xxx.xxx[*],自定義腳本的執行命令 "$1" "$2" "$3"
, 重啓zabbix服務,使用zabbix_get -s 本地ip -k 自定義監控項[參數1,參數2,參數3...]
注意,這裏的的參數是不用加""
的
- 今天還聽到說類能夠不執行init方法直接調用?怎麼作?
- django自身就支持原子性,支持事務
- 序列化器是支持自定義返回數據的
- request.post.data()接收到request對象是不能直接添加數據的,可使用淺拷貝而後就能夠想字典同樣使用了,而後在serialize指定data的時候使用這個淺拷貝的數據對象
8.27
- zy業務視角大屏和用戶視角大屏用的是兩個django命令,執行函數生成的cache數據,數據時從oracle庫中獲取的數據,使用的相似sqlarchmy鏈接oracle數據庫來執行sql語句獲取數據。
- 當openpyxl保存文件到指定路徑的時候,能夠在文件名中直接寫成絕對路徑或者相對路徑,zy的DCO分組發郵件的時候是按組來發送的,給一個組底下所屬人員都發郵件,在郵件中的附件須要指定這個excel表格,若是直接使用絕對路徑的文件名,發佈出去,由於郵件在加附件的時候會把絕對路徑中的
/
進行轉義,致使附件加不上,郵件發佈出去,而後我在絕對路徑的文件名字符串以前加了r
,使/不轉義、再測就能夠發送成功了
- IBM的aix小機,性能介於移動pc和服務器之間,不能使用命令補全,刪除這些操做,因此在這裏執行任何一個命令都是要很是謹慎的,千萬千萬要謹慎。另外go中的aix編譯有問題。
- 監控中間件的腳本走得就是java的api
8.28
- 客戶溝通,不能肯定的東西,說回去商量,不能懵。
- 自定報表的更新時間,原來想法是用週期天數去作時間的加減,而後在判斷這個時間是否符合條件再執行,後來改爲了直接在表中建立一個下次更新時間,直接在每次執行的時候對這個時間進行加週期操做,獲得一個將來的事件,而後任務天天取下次更新時間知足的對象來執行, update_time__lte = now;
8.29
- zy的網路連通性檢測中,大屏中的數據和網絡連通錯誤數據分別對應的兩個緩存,不過存在一個問題,他們的人在添加的時候可能同一個地方添加多2條以上的鏈路,現行的判斷邏輯是兩條聯絡路斷就認爲是雙線終端,因此在做報告的時候構造一個字典對象,以地名爲鍵,值爲一個列表,只要有錯誤,就把運營商的類型加進去,以後再對這個字典進行取值判斷列表中元素數量的判斷,大於2的就認爲是重複的,爲1的直接在構造問題的時候就把它添加進去。
- 給ym的部署中給想錯了,差點給忘了用go打包,突然想起來才改掉,go打的包,真香
8.30
- zy的solarwinds設備在新加的時候須要註冊模板,只有吧模板添加上,纔會在數據庫中查到該主機ip,另外對本身的代碼要有信心,勇於去質疑他們的問題。
- zabbix的search是模糊查找,只能針對一個,filter是精確查找,能夠對於一組元素。