python學習 獲取上一分鐘時間

2021-09-09 07:56:32 字數 4194 閱讀 8097

一、需求

計算業務日誌內乙個介面請求的響應時間和超過1.5秒的數量,這裡需要兩個結果,因為有時間戳,打算每分鐘執行一次指令碼,計算上一分鐘的日誌資訊。結果會傳到falcon後由grafana展示

下面就是展示的結果,這是乙個彙總圖,三個節點,每個節點2個值,一共展示6個監控指標的資料,左側是響應時間,右側是超過1.5秒的數量

二、分享指令碼內容如下

#!/usr/bin/env python

import os

import time

import commands

import requests

import json

import sys

import datetime

time = time.strftime(

"%y-%m-%d"

, time.localtime())

logtime =

(datetime.datetime.now(

)+datetime.timedelta(minutes=-1

)).strftime(

"%y-%m-%d %h:%m"

)hosts =

['node01'

,'node02'

,'node02'

]var = sys.ar**[1]

for host in hosts:

str1 =

"grep \"\" /home/***.log.|grep |awk -f = ''"

.format

(logtime=logtime,time=time,host=host,

str=

"end"

) str2 =

"grep \"\" /home/***.log.|awk -f = '$1~\"\" && $nf>1500'|wc -l"

.format

(logtime=logtime,time=time,host=host)

if var ==

"restime"

:str

= str1

elif var ==

"timeoutnum"

:str

= str2

print

strclass

monitor()

:def

__url

(self)

: value1 = commands.getoutput(

str)

value = value1.split(

".")[0

]if value.isdigit():

value = value

else

: value =

int(0)

return value

def__falcon

(self,value)

: payload_list =

ts =

int(time.time())

temp_dict =

print temp_dict

requests.post(

"", data=json.dumps(payload_list)

)def

go(self)

: result = self.__url(

) self.__falcon(result)

value = monitor(

) value.go(

)

三、說明
time = time.strftime(

"%y-%m-%d"

, time.localtime(

))

這行是使用伺服器本地時間,格式為2019-01-01這樣的格式,用於匹配檔名字尾,如***.log.2019-01-01

logtime =

(datetime.datetime.now(

)+datetime.timedelta(minutes=-1

)).strftime(

"%y-%m-%d %h:%m"

)

這行是取當前時間上一分鐘的時間,格式是2019-01-01 12:00,用於後面匹配日誌時間戳,寫shell使用的是下面的方法實現

# date --date="-1 minute" +%y-%m-%d

2019-01-17

上面的時間函式是最近接觸的,後面很多運維工作需要這樣的方法

hosts =

['node01'

,'node02'

,'node02'

]

這行是hosts列表,假設現在有三個節點,那麼我需要知道每個節點的監控資料,後面採用for迴圈讀取列表內容

var = sys.ar**[

1]

讀取指令碼的第乙個引數,這裡針對兩個監控指標分別設定乙個引數,分別是restime、timeoutnum,代表響應時間和超時數量。

for host in hosts:

str1 =

"grep \"\" /home/***.log.|grep |awk -f = ''"

.format

(logtime=logtime,time=time,host=host,

str=

"end"

) str2 =

"grep \"\" /home/***.log.|awk -f = '$1~\"\" && $nf>1500'|wc -l"

.format

(logtime=logtime,time=time,host=host)

使用for迴圈讀取hosts列表,因為後面上報資料的時候要帶著節點資訊,所以每次處理日誌的時候需要搜尋日誌內的節點資訊和監控資料,下面就是兩個命令,目前分析日誌只會這麼用,囧!

if var ==

"restime"

:str

= str1

elif var ==

"timeoutnum"

:str

= str2

print

str

判斷引數,如果restime就用str1分析日誌,如果是timeoutnum就用str2分析日誌

value1 = commands.getoutput(

str)

value = value1.split(

".")[0

]

第一行是使用系統的命令,返回處理的結果

第二行是對取出的值進行分割,由於值是浮點數,所以用「.」分割取第一部分內容就是整數,這是split函式的用法,第一列[0],第二列[1],以此類推,當然如果不符合格式取出來有可能是其它資訊,後面會進行判斷

if value.isdigit():

value = value

else

: value =

int(0)

return value

這是乙個if判斷,看結果是否是整數。如果是整數value就不變,如果不是整數,那麼賦值為0,由於介面不是每分鐘都呼叫,所以一很多時候使用awk是報錯了,那麼這時候就認為沒有值,所以是0

temp_dict =

注意這裡endpoint的後面的host是個變數,就是上面for迴圈裡面取到的hosts值,這樣在falcon就可以區分出來各個節點的監控資料了

下面的內容就是falcon上報的方法,網上很多介紹就是照葫蘆畫瓢,這裡就不做介紹了

四、結果展示

cron裡面的配置,每分鐘一次上報到falcon

* * * * * cd /home/shell;python ***.py restime;python ***.py timeoutnum

一分鐘sed入門(一分鐘系列)

1.簡介 sed是一種行編輯器,它一次處理一行內容。2.sed呼叫方式 sed options command file s sed options f scriptfile file s 第一種直接在命令列中執行,第二種把命令寫到了指令碼中,二者無本質區別。示例 1 列印hello.txt的內容 ...

一分鐘看懂mysql 一分鐘,看懂易貨

從20世紀80年代開始,易貨公司在美國加拿大 澳大利亞等國興起,成為這些國家減少現金用量 增加銷售 減少庫存 開發新客戶 開闢新市場 促進經濟發展的重要產業。也成為了企業消化庫存商品 剩餘生產能力 無形資產的有效方式和在遭遇資金瓶頸時的新選擇。2015年以來,中國線下易貨店開始了矇眼狂奔,在河南南陽...

一分鐘管理

有效而優秀管理者的 三板斧 一分鐘管理 你和下屬一起設定 一分鐘目標 確保他們知道自己應該做什麼,以及好的工作表現是什麼樣的。之後,你會努力發現他們做對了什麼事,好對他們進行 一分鐘稱讚 最後,如果你們完全有能力做好某件事,卻沒能做好,你就對他們進行 一分鐘批評 一分鐘目標 1.擬定3 5 個目標,...