2019-08

8.1

  1. hex內置函數直接將十進制數轉換成十六進制
    把十六進制等其餘轉回十進制可使用eval 、
    eval ('0x3d') 就能夠將16進制轉換成十進制
  2. 數據庫的集羣配置得在同一個網段?zabbix的主備使用的是代理模式,正常狀況下代理端指向主的數據庫,異常狀況能夠改變爲備數據庫,代理端能夠理解爲一個zabbix服務端
  3. 集合真是個好東西,快速進行兩個列表的比較,
  4. pymysql模塊中使用conn對象建立的cursor對象,能夠添加參數as_dict=true來輸出字典
  5. sql語錄的in判斷where id in(1,2,3,4)
  6. 集合中的元素不能是字典,字典是不能被hash的,
    刪除列表中符合條件的某個元素,可使用l.index找出元素的位置,再pop索引位置刪除

8.2

  1. 整理了一天模板,思科路由器交換機模板通用,hp服務器使用ilo模板,已經集成到了hp snmpv2,有一些沒得須要參照mib文件實際添加。

8.3

  1. 又浪費了一個美好的週末,浪費了48小時,真是閒的蛋疼,也不知道培養啥興趣,另外哪兒託真好看。
  2. 有時候當下想不起來的東西,在某個瞬間就會思路通暢。

8.4

  1. 在參數的配置中,能拆分的儘可能拆分。
  2. django orm 模型的多對多關係,還有多個字段對應同一張表的時候出現的問題,詳情看django 的多對多。
  3. 模塊的抽象儘可能不要有啥聯繫

8.5

  1. Ubuntu真的難用

8.6

  1. 代碼的優化問題,像今天一共有十二條數據,每一個都要執行一次獲取結果傳值,使用了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

  2. 使用zabbix_trapper方式進行監控的時候,zabbix_sender需指定的參數有-z 主機ip -s主機名字 -k自定義key(只是一個傳值的形式鍵) -o 表示的是傳的真實值
    對於多名字的監控像,像網絡鏈路這種的,一個NAME對應一個key,在建立自動發現規則的時候,設置爲zabbix_trapper方式,定義一個key,在後臺就可使用zabbixsender給這個key發送全部的宏 {#NAME}:xxx,這樣,這個{$NAME} 宏變量就能夠在監控項原型觸發器原型中使用了。python

  3. 更改完celery任務後,先在supervisorctl中關閉celery進程,刪除項目的celery-schedule文件,再重啓celery任務,mysql

  4. 在將solarwinds的告警信息映射到監控系統中時,
  5. 深度系統,真香
  6. firefox瀏覽器挺好用,國內不限制,能夠各類端同步。linux

8.7

  1. mssql中的一個字段是uuid對象,直接在數據庫中存儲的數據是uuid值。取這個字段出來的時候是一個uuid對象。要獲取到存儲的uuid串能夠對對象使用str函數進行強轉換
  2. 各種監控產品邏輯都差很少,
  3. sys的argv是一個屬性,不是一個方法,不用加括號,返回的是一個參數列表,能夠做爲一個接收參數的橋樑,按下標進行取值
  4. os執行linux方法能夠用os.system會直接打印出命令執行的結果,他的返回值是一個執行狀態值,0表示執行成功,非0則失敗,若是不想要直接打印命令執行結果,可使用os.popen,也能夠執行命令,返回值有read方法。能夠得出執行結果,不過結果中自帶一個換行符,須要強制去除
  5. 深度系統能夠在配置文件中配置它的主題 usr
  6. 判斷文件是否存在的需求,想的用腳本的方式走,參數接收ip及文件名,一開始想的仍是在腳本中執行ssh連接到主機,再用os來判斷文件是否存在。 可是這樣還須要用戶名密碼,還得提變動申請。
    換一種思路,由於使用的是外部檢查,腳本是放在server端的,就像在server端執行一條zabbix_get  配置zabbix的監控項vfs.file.exist[filename]來查找對應的文件,同樣,在腳本中執行這條命令就能夠。print他的返回值,就能夠在zabbix端收到相應的數據。
  7. 在使用自動發現監控項原型建立出的監控項,若是取消掉其中一個監控項,會有一個延遲刪除時間,在這段時間內,這個監控項仍是在的,只不事後面的有一個黃標,表示在延遲時間後刪除,也能夠手動刪除,

8.8

  1. 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
  2. 對於觸發器的配置,除了能夠正常的在頁面點選意外,還能夠手動的將兩個監控項進行搭配使用
    正常的表達式 agent.ping <> 1 報警
    手動的 表達式1 比較符 表達式2 ,將另外一個監控項的結果做爲另外一個監控項的判斷條件
  3. 對於py腳本,在文件頭申明解釋器路徑,相似於#!/bin/bash
    py的申明能夠是 #!/usr/bin/python3 也能夠從環境中獲取#!/usr/bin/env python3
    建立完腳本後,也時須要受權,chmod +x xxxx.py 而後 ./ 腳本名執行。
  4. 對於邁普設備和思科設備的告警合併,邁普的sql語句查出來的正常ip值先存放一個cache,到了下次task執行獲取到正常ip值,將後取到的ip值跟先前cache裏存的正常ip值進行比較,這裏使用的set,採用集合的形式去作比較,上一次值中有的,下一次沒有,意味着這個ip值錯誤了,用a.difference(b),b.difference(a),兩次比較產生錯誤的ip數和回覆的ip數,再講這個錯誤ip數單獨存一份cache,專門對錯誤的ip進行統計,有報錯的就添加進去,有恢復的就剔除出去,最後再和思科的告警信息合併,就是最終呈現的告警信息。
  5. 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

  1. 對於監控項的定時監控設置:默認的監控項沒有定時這個功能,只有一個自定義間隔時間,是設置週期的,需求是對於某個時間後的文件存在進行監控,能夠換個思路,在觸發器的設置中,有一個time函數,格式是100000時分秒 表明的是 十點零分零秒,觸發器表達式:{xxxxx.time()>100000} and {xxxx.last()=0}和管轄,配合另外的監控項 就能夠構造出在十點之後,某個監控項的最新值是0的時候就報警,就能夠完成定時的對監控項實現定時執行的效果,
    觸發器還能夠設置依賴關係,一個觸發器依賴另外一個觸發器的觸發
  2. 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名
  3. 對於代碼的健壯性,儘可能考慮報錯的場景,多用get,

8.12

  1. 中間變量用的太多會不會形成一些問題。

8.13

  1. 在部署項目的時候首先在家要把要用的包都下載好,由於在現場是不能連外網的。安裝好環境以後,就能夠部署軟件了。須要的mysql,redis,nginx均可以在114的repo上下載,若是沒有的話也須要提早準備。
  2. 由於新上的消息平臺跟原來的監控系統也有聯繫,因此在更新監控系統的時候,遵循操做手冊,先把全部涉及的項目先備份,而後替換要更換的文件。
    由於監控系統主服務及celery和一些命令格式都是用supervisor來管理的進程,因此在用supervisor來啓動這些進程的時候,就打開日誌文件,以確保服務的正常啓動。當感受更新不穩定的時候,時刻準備將代碼退回到備份檔。由於supervisor有大概兩分鐘的重試時間,超過兩分鐘的話,若是服務不可用,立馬退回備份檔,以確保生產環境不受影響,而後查看日誌信息查錯再準備更新。
  3. 今天在上線消息平臺的時候,由於測試的那期間監控系統時沒有報錯的,當看到消息平臺半天沒動靜,覺得代碼出問題了,就給回退了,而後一直髮不出消息,這是一種對本身代碼的沒信心,而後就在那盲目的瞎找問題,浪費了不少時間,正確作法是,對本身的代碼邏輯清晰,知道哪兒在哪,即便是出了問題,首要是去查看日誌,並且之後在代碼中要對錯誤日誌的logging即便進行記錄,try except也要多用,這樣才能發現問題。即便排除
  4. 在監控系統發消息的攔截部分中,今天明明設置攔截了,可是沒有及時生效,也浪費了不少時間,莫名其妙的產生的bug,並且在send_msg中由於攔截了消息,進行消息轉發,可是在鏈接的close中沒有進行處理,在close進行了處理,接觸bug,
  5. supervisor的使用,由python編寫,安裝supervisor 用systemctl啓動supervisord.service服務,在/etc/supervisor.d/目錄下配置咱們的進程管理.conf文件,須要在/etc/supervisor.conf中的最後include中修改成 ./supervisor.d/*.conf
  6. zabbix中修改觸發器的時候,需注意觸發器的更新時間,不然立馬更新後使用的仍是先前的觸發器,會形成誤報警。

8.14

  1. 數據結構的優化是有很大空間能夠壓縮的,只要方法做對,瞬間能夠省去不少代碼,還均可以達到目的。
  2. 使用zabbix的api來建立虛擬主機可監控項觸發器,配合使用zabbix_sender方式能夠完成其餘業務的的告警集成到zabbix告警系統
  3. 今天將測試環境的監控系統告警發送轉移到消息平臺,測試環境的send_msg直接夯住了,沒找到緣由

8.15

  1. 更到生產環境,內心就是沒底,特別沒底,就怕出問題。
  2. 消息平臺運行成功,另外之後還要把代碼中的print去掉,不要遺漏

8.16

  1. 數據結構的拼接仍是個大問題,一個好的數據結構能夠省去不少的事情。更高效。
  2. 變量的申明,最好是見名知意的那種。
  3. dbeval很好用,還能夠生成表之間的ER關係圖譜
  4. 對於websocket,須要在consumer中建立生成數據的函數,而後在routing文件中建立相應branch的url

8.19

  1. 作客戶的poc測試,須要提早溝通好,須要的設備信息,須要使用的測試包,包括license,甚至是linux的鏡像源,當前咱們使用的是centos的7.4版本。全部能考慮到的地方都要準備好。
  2. 進行poc測試看poc手冊。
  3. 各個功能軟件的ip鏈接,須要把各自的hosts內容都配置好,要學會多利用日誌報錯來查看問題所在點。

8.20

  1. 使用pyinstaller進行py文件的打包處理。
  2. 在寫腳本的時候,健壯性是前提,對於可能取不到的值,能夠提早進行變量的申明,
  3. 今天在fping腳本的編碼中,個人想法是同一個腳本執行屢次而後分別取出想要的loss值,delay值,status值,可是這樣會很繁瑣,並且效率很低。奇哥的寫法是直接一次執行,全部結果都取到,而後構形成一個字典,將每一個值匹配一個key,在zabbix執行的時候,傳入一個key值,根據key值的不一樣來取出相應的值,
    還有就是在配置userparamsters的時候,直接配置三個不通的監控項,依次取值,這個真的很強。
  4. 跟用戶溝通,須要明確需求,列出清單,一項一項的走。並且今天中午明明我把包放進文件夾了,到了客戶打開裏面居然是空的,還好沒有清空回收站,才恢復了,並且當時我沒有聲張,其實這個沒啥,想太多了,那時是能夠停下去拿到最新的包,不能去拿沒有把握的包去部署,此次是幸運恢復的是最新包,萬一錯了,那時間成本可能就划不來了。下次不能在再這樣了
  5. win7中打的包在2003,xp上不能使用,考慮用go來編譯一個客戶端。

8.21

  1. go的交叉編譯是一個很吊的東西,解決可不少的依賴,用go來編譯安裝包,依賴文件不像py那樣須要把整個py環境打進去,並且不存在win7打出的包xp和2003不能使用的狀況,go編譯出來的包,兼容性很強,跨平臺使用不成問題,
  2. fping在windows平臺和linux平臺中參數是不同的,顯示的結果也是不同的,在go中調用命令拿到的返回結果跟終端顯示也是不同的
  3. django2.x在url的設置中作了變化,再也不使用^ $來配置url,若是要使用正則匹配url,須要使用re_path,並且在path中,內置了幾個數據類型來進行url中的正則匹配。默認的就是str,若是要強制定義,使用 來正則匹配。
  4. go中的切片,字符,整形判斷概念忘了個差很少,代碼全靠百度,
  5. go程序的參數傳入,if判斷,swith case語法,編譯包的使用及參數調用。
  6. datetime.datetime.fromtimestampt(時間戳),直接轉成的日期對象能夠直接和mysql中自動添加datetime對象做比較,再也不像原來同樣還須要先進行時區的指定。

8.22

  1. 多使用cache中的數據來處理,在作dco報表的時候,event中的數據已經包含了想要的數據,可使用tag和分組group來進行分類,在作tag的時候,cache中包含了全部觸發器中的tag項,在cache中的顯示是一個大列表中包含的tag,
  2. 每次在變動代碼的時候注意備份,備份,備份,當要從備份中回覆某個文件的時候,使用cp,不要想固然的使用mv,當某個時候想要總體回遷的時候,你就會發現你忘了mv了哪一個文件了,到時候就哭吧。
  3. 使用zabbix sender發送數據,發出去的都是字符串數據,在zabbix中建立監控項原型的時候只要選擇好數據類型,就能夠顯示了,可是當返回的數據字符串內部包含的浮點型數據,整形就匹配不了了,就得使用浮點型來顯示數據了

8.23

  1. 能從內存中取數據是真的方便,減小查數據庫
  2. 對xls ,xlsx表格分別使用xlrd openpyxl方式能夠讀取數據,操做數據,
  3. zabbix的item對主機直接取是能夠拿到全部的數據的,包括主機建立的監控項和自動發現中監控項原型映射出來的監控項
  4. 25號才發現更新的代碼還有一處沒有完成改變,問題還挺大的,明天去更改下,真的是,之後只要有代碼變更就的記下來,否則過些日子就忘的一乾二淨了,還有天天的工做內容也得開始羅列清單了,腦子並不能記全部的東西

8.26

  1. 今天碰到一個列表裏包含多字典的數據結構,對列表遍歷取值,作條件判斷,當知足條件的最數據處理,而且從列表中remove刪除,可是在打印的時候卻沒有刪除,爲啥?
  2. 忽然要接手兩個項目,全新的練手,我了個去,亞歷山大,表面風平浪靜,實際上慌得一批啊
  3. django的後臺關聯模型的名稱展現須要定義__str__方法,
  4. 在go中修改文件權限,在windows中是沒有啥做用的,linux系列中直接chmod(文件名,權限碼 0777),go中有四種讀寫文件的方法
  5. 在zabbix彙總的userparamsters中配置的自定義監控項,當要對監控項進行傳值 的時候,可使用 xxx.xxx[*],自定義腳本的執行命令 "$1" "$2" "$3", 重啓zabbix服務,使用zabbix_get -s 本地ip -k 自定義監控項[參數1,參數2,參數3...]注意,這裏的的參數是不用加""
  6. 今天還聽到說類能夠不執行init方法直接調用?怎麼作?
  7. django自身就支持原子性,支持事務
  8. 序列化器是支持自定義返回數據的
  9. request.post.data()接收到request對象是不能直接添加數據的,可使用淺拷貝而後就能夠想字典同樣使用了,而後在serialize指定data的時候使用這個淺拷貝的數據對象

8.27

  1. zy業務視角大屏和用戶視角大屏用的是兩個django命令,執行函數生成的cache數據,數據時從oracle庫中獲取的數據,使用的相似sqlarchmy鏈接oracle數據庫來執行sql語句獲取數據。
  2. 當openpyxl保存文件到指定路徑的時候,能夠在文件名中直接寫成絕對路徑或者相對路徑,zy的DCO分組發郵件的時候是按組來發送的,給一個組底下所屬人員都發郵件,在郵件中的附件須要指定這個excel表格,若是直接使用絕對路徑的文件名,發佈出去,由於郵件在加附件的時候會把絕對路徑中的/進行轉義,致使附件加不上,郵件發佈出去,而後我在絕對路徑的文件名字符串以前加了r,使/不轉義、再測就能夠發送成功了
  3. IBM的aix小機,性能介於移動pc和服務器之間,不能使用命令補全,刪除這些操做,因此在這裏執行任何一個命令都是要很是謹慎的,千萬千萬要謹慎。另外go中的aix編譯有問題。
  4. 監控中間件的腳本走得就是java的api

8.28

  1. 客戶溝通,不能肯定的東西,說回去商量,不能懵。
  2. 自定報表的更新時間,原來想法是用週期天數去作時間的加減,而後在判斷這個時間是否符合條件再執行,後來改爲了直接在表中建立一個下次更新時間,直接在每次執行的時候對這個時間進行加週期操做,獲得一個將來的事件,而後任務天天取下次更新時間知足的對象來執行, update_time__lte = now;

8.29

  1. zy的網路連通性檢測中,大屏中的數據和網絡連通錯誤數據分別對應的兩個緩存,不過存在一個問題,他們的人在添加的時候可能同一個地方添加多2條以上的鏈路,現行的判斷邏輯是兩條聯絡路斷就認爲是雙線終端,因此在做報告的時候構造一個字典對象,以地名爲鍵,值爲一個列表,只要有錯誤,就把運營商的類型加進去,以後再對這個字典進行取值判斷列表中元素數量的判斷,大於2的就認爲是重複的,爲1的直接在構造問題的時候就把它添加進去。
  2. 給ym的部署中給想錯了,差點給忘了用go打包,突然想起來才改掉,go打的包,真香

8.30

  1. zy的solarwinds設備在新加的時候須要註冊模板,只有吧模板添加上,纔會在數據庫中查到該主機ip,另外對本身的代碼要有信心,勇於去質疑他們的問題。
  2. zabbix的search是模糊查找,只能針對一個,filter是精確查找,能夠對於一組元素。
本站公眾號
   歡迎關注本站公眾號,獲取更多信息