在我們的日常生活工作中,經(jīng)常會(huì)遇到需要上傳日志的場(chǎng)景,比如多臺(tái)機(jī)器運(yùn)行同一個(gè)程序,并且需要記錄每臺(tái)機(jī)器程序產(chǎn)生的日志,根據(jù)相關(guān)關(guān)鍵詞告警,或者進(jìn)行無(wú)數(shù)據(jù)告警,如果自己搭建這套系統(tǒng)需要耗費(fèi)不少時(shí)間,因此如果能使用市面上現(xiàn)成的系統(tǒng)會(huì)很方便。
本文將教你如何通過(guò)阿里云日志服務(wù)搭建一套通過(guò)Python上傳日志、配置日志告警的監(jiān)控服務(wù)。
1.準(zhǔn)備
開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒(méi)有,可以訪問(wèn)這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。
**(可選1) **如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.
**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點(diǎn):Python 編程的最好搭檔—VSCode 詳細(xì)指南。
請(qǐng)選擇以下任一種方式輸入命令安裝依賴(lài) :
- Windows 環(huán)境 打開(kāi) Cmd (開(kāi)始-運(yùn)行-CMD)。
- MacOS 環(huán)境 打開(kāi) Terminal (command+空格輸入Terminal)。
- 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install aliyun-log-python-sdk
接下來(lái),登陸阿里云控制臺(tái),進(jìn)入日志應(yīng)用,通過(guò)下面的步驟創(chuàng)建日志Project和Logstore:
點(diǎn)擊Python - SDK 寫(xiě)入,再根據(jù)你的需要?jiǎng)?chuàng)建Project和Logstore:
隨后會(huì)進(jìn)入這個(gè)頁(yè)面,直接點(diǎn)擊確定即可:
2.使用阿里云SDK上傳Python日志
為了使用阿里云SDK上傳日志,我們需要先獲取Access Token, 將鼠標(biāo)移動(dòng)到右上角頭像上點(diǎn)擊AccessKey管理:
然后點(diǎn)擊創(chuàng)建AccessKey,輸入相關(guān)驗(yàn)證信息就能獲取 accessKeyId 和 accessKey:
編寫(xiě)Python代碼,配置AccessKey和你在第一步驟創(chuàng)建的Project及l(fā)ogstore名稱(chēng):
from aliyun.log import LogClient, PutLogsRequest, LogItem, GetLogsRequest, IndexConfig
import time
# 配置AccessKey、服務(wù)入口、Project名稱(chēng)、Logstore名稱(chēng)等相關(guān)信息。
# 阿里云訪問(wèn)密鑰AccessKey。更多信息,請(qǐng)參見(jiàn)訪問(wèn)密鑰。
# 阿里云賬號(hào)AccessKey擁有所有API的訪問(wèn)權(quán)限,風(fēng)險(xiǎn)很高。強(qiáng)烈建議您創(chuàng)建并使用RAM用戶進(jìn)行API訪問(wèn)或日常運(yùn)維。
accessKeyId = "你的AccessKey ID"
accessKey = "你的AccessKey"
# 日志服務(wù)的域名。更多信息,請(qǐng)參見(jiàn)服務(wù)入口。此處以廣州為例,其它地域請(qǐng)根據(jù)實(shí)際情況填寫(xiě)。
endpoint = "cn-guangzhou.log.aliyuncs.com"
# 創(chuàng)建日志服務(wù)Client。
client = LogClient(endpoint, accessKeyId, accessKey)
# Project名稱(chēng)。
project_name = "aliyun-test-project"
#Logstore名稱(chēng)
logstore_name = "aliyun-test-logstore"
# 查詢語(yǔ)句。
query = "*| select dev,id from " + logstore_name
# from_time和to_time表示查詢?nèi)罩镜臅r(shí)間范圍,Unix時(shí)間戳格式。
from_time = int(time.time()) - 3600
to_time = time.time() + 3600
然后我們就可以編寫(xiě)Python代碼創(chuàng)建索引(日志的索引可以理解為MySQL中的數(shù)據(jù)庫(kù))和插入日志了:
# 向Logstore寫(xiě)入數(shù)據(jù)。
def put_logs():
print("ready to put logs for %s" % logstore_name)
log_group = []
for i in range(0, 100):
log_item = LogItem()
contents = [
('dev', 'test_put'),
('id', str(i))
]
log_item.set_contents(contents)
log_group.append(log_item)
request = PutLogsRequest(project_name, logstore_name, "", "", log_group, compress=False)
client.put_logs(request)
print("put logs for %s success " % logstore_name)
time.sleep(5)
if __name__ == '__main__':
# 向Logstore寫(xiě)入數(shù)據(jù)。
put_logs()
運(yùn)行程序后出現(xiàn)對(duì)應(yīng)的提示,說(shuō)明日志上傳成功:
python test.py
# ready to put logs for tradingview
# put logs for tradingview success
進(jìn)入控制臺(tái)對(duì)應(yīng)的Project,你會(huì)看到剛剛上傳的日志已經(jīng)顯示在上面:
3.配置日志告警
日志告警的配置也非常簡(jiǎn)單,輸入你的查詢條件,獲得輸出后點(diǎn)擊上方另存為告警:
在查詢統(tǒng)計(jì)中添加你需要監(jiān)控并觸發(fā)告警的條件,比如我設(shè)置出現(xiàn)一次該日志的時(shí)候觸發(fā)告警:
效果如下,我這里文本配置得太簡(jiǎn)單了,你也可以在標(biāo)注中配置復(fù)雜一點(diǎn)的文本:
用起來(lái)挺方便的,如果你有類(lèi)似的多機(jī)器日志監(jiān)控服務(wù),比如分布式模型訓(xùn)練監(jiān)控、交易服務(wù)監(jiān)控等等,可以考慮使用這個(gè)日志服務(wù)。
-
監(jiān)控
+關(guān)注
關(guān)注
6文章
2223瀏覽量
55290 -
編輯器
+關(guān)注
關(guān)注
1文章
806瀏覽量
31231 -
日志
+關(guān)注
關(guān)注
0文章
138瀏覽量
10661 -
python
+關(guān)注
關(guān)注
56文章
4802瀏覽量
84885
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論