av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

Python函數(shù)調(diào)用追蹤實現(xiàn)代碼

瀏覽:2日期:2022-07-04 09:50:00

對于分布式追蹤,主要有以下的幾個概念:

追蹤 Trace:就是由分布的微服務(wù)協(xié)作所支撐的一個事務(wù)。一個追蹤,包含為該事務(wù)提供服務(wù)的各個服務(wù)請求。 跨度 Span:Span是事務(wù)中的一個工作流,一個Span包含了時間戳,日志和標(biāo)簽信息。Span之間包含父子關(guān)系,或者主從(Followup)關(guān)系。 跨度上下文 Span Context:跨度上下文是支撐分布式追蹤的關(guān)鍵,它可以在調(diào)用的服務(wù)之間傳遞,上下文的內(nèi)容包括諸如:從一個服務(wù)傳遞到另一個服務(wù)的時間,追蹤的ID,Span的ID還有其它需要從上游服務(wù)傳遞到下游服務(wù)的信息。

我實現(xiàn)了一種簡單的調(diào)用追蹤。

import uuidimport osimport timel = []class Recorder(object): def __init__(self,servername,root_span = None): if root_span == None: self.__span = Span(servername) else: self.__span = Span(servername,root_span) #上下文管理器 def __enter__(self): return self.__span # 退出方法中,用來實現(xiàn)善后處理工作 def __exit__(self, exc_type, exc_val, exc_tb): self.__span.record() self.__span.record_save(self.__span.span)class Span(object): def __init__(self,servername,root_span = None): self.servername = servername self.span = self.newspan() if root_span != None: root_span.dic[’child_span’] = self.span self.span['root_span_flag'] = False def newspan(self): self.dic = { 'spanid': uuid.uuid4().int, 'servername': self.servername, 'location': '', 'ip': '', 'durationtime': 0, 'starttime': time.time(), 'endtime':0, 'tag': '', 'log': '', 'root_span_flag':True, 'child_span': '' } return self.dic def record_save(self, span): currenttracer = {'id': span['spanid'], 'data': span} print(currenttracer) l.append(currenttracer) def record(self): self.span['servername'] = self.servername self.span['location'] = os.getcwd() + '.' + self.servername self.span['endtime'] = time.time() self.span['durationtime'] = self.span['endtime'] - self.span['starttime'] def setspantag(self,tag): self.span['tag'] = tag def setspanlog(self,log): self.span['log'] = log# 連續(xù)調(diào)用with Recorder(’server1’) as span: time.sleep(1) span.setspantag('test') #調(diào)用server1方法 print('server1') with Recorder(’server2’,span) as span1: time.sleep(2) # 調(diào)用server2方法 print('server2') with Recorder(’server3’,span1) as span2: time.sleep(0.5) # 調(diào)用server3方法 print('server3')#單獨調(diào)用記錄with Recorder(’server4’) as span_test1: time.sleep(1.5) print('server4')with Recorder(’server5’) as span_test2: time.sleep(2) print('server5')

運行結(jié)果:

server1server2server3{’id’: 224716339449765695394515303164364012192, ’data’: {’spanid’: 224716339449765695394515303164364012192, ’servername’: ’server3’, ’location’: ’D:python_protestprotesttracetrace_main.server3’, ’ip’: ’’, ’durationtime’: 0.5004403591156006, ’starttime’: 1598947338.0551107, ’endtime’: 1598947338.555551, ’tag’: ’’, ’log’: ’’, ’root_span_flag’: False, ’child_span’: None}}{’id’: 254736847532758359233387151739984206570, ’data’: {’spanid’: 254736847532758359233387151739984206570, ’servername’: ’server2’, ’location’: ’D:python_protestprotesttracetrace_main.server2’, ’ip’: ’’, ’durationtime’: 2.501264810562134, ’starttime’: 1598947336.0542862, ’endtime’: 1598947338.555551, ’tag’: ’’, ’log’: ’’, ’root_span_flag’: False, ’child_span’: {’spanid’: 224716339449765695394515303164364012192, ’servername’: ’server3’, ’location’: ’D:python_protestprotesttracetrace_main.server3’, ’ip’: ’’, ’durationtime’: 0.5004403591156006, ’starttime’: 1598947338.0551107, ’endtime’: 1598947338.555551, ’tag’: ’’, ’log’: ’’, ’root_span_flag’: False, ’child_span’: None}}}{’id’: 91028031631192607088457781914309166266, ’data’: {’spanid’: 91028031631192607088457781914309166266, ’servername’: ’server1’, ’location’: ’D:python_protestprotesttracetrace_main.server1’, ’ip’: ’’, ’durationtime’: 3.5021069049835205, ’starttime’: 1598947335.0534441, ’endtime’: 1598947338.555551, ’tag’: ’test’, ’log’: ’’, ’root_span_flag’: True, ’child_span’: {’spanid’: 254736847532758359233387151739984206570, ’servername’: ’server2’, ’location’: ’D:python_protestprotesttracetrace_main.server2’, ’ip’: ’’, ’durationtime’: 2.501264810562134, ’starttime’: 1598947336.0542862, ’endtime’: 1598947338.555551, ’tag’: ’’, ’log’: ’’, ’root_span_flag’: False, ’child_span’: {’spanid’: 224716339449765695394515303164364012192, ’servername’: ’server3’, ’location’: ’D:python_protestprotesttracetrace_main.server3’, ’ip’: ’’, ’durationtime’: 0.5004403591156006, ’starttime’: 1598947338.0551107, ’endtime’: 1598947338.555551, ’tag’: ’’, ’log’: ’’, ’root_span_flag’: False, ’child_span’: None}}}}server4{’id’: 103171729522922437998918618387133480096, ’data’: {’spanid’: 103171729522922437998918618387133480096, ’servername’: ’server4’, ’location’: ’D:python_protestprotesttracetrace_main.server4’, ’ip’: ’’, ’durationtime’: 1.5001769065856934, ’starttime’: 1598947338.555551, ’endtime’: 1598947340.055728, ’tag’: ’’, ’log’: ’’, ’root_span_flag’: True, ’child_span’: None}}server5{’id’: 320091321623887285825256878422834254741, ’data’: {’spanid’: 320091321623887285825256878422834254741, ’servername’: ’server5’, ’location’: ’D:python_protestprotesttracetrace_main.server5’, ’ip’: ’’, ’durationtime’: 2.0005736351013184, ’starttime’: 1598947340.055728, ’endtime’: 1598947342.0563016, ’tag’: ’’, ’log’: ’’, ’root_span_flag’: True, ’child_span’: None}}

關(guān)于下一步,會使用redis存儲其結(jié)果,并進(jìn)行相應(yīng)的輸出分析。

修過不能追蹤同級調(diào)用的問題

import uuidimport osimport timel = []class Recorder(object): def __init__(self,servername,root_span = None): if root_span == None: self.__span = Span(servername) else: self.__span = Span(servername,root_span) #上下文管理器 def __enter__(self): return self.__span # 退出方法中,用來實現(xiàn)善后處理工作 def __exit__(self, exc_type, exc_val, exc_tb): self.__span.record() self.__span.record_save(self.__span.span)class Span(object): def __init__(self,servername,root_span = None): self.servername = servername self.span = self.newspan() if root_span != None: root_span.dic[’child_span’].append(self.span) self.span['root_span_flag'] = False def newspan(self): self.dic = { 'spanid': uuid.uuid4().int, 'servername': self.servername, 'location': '', 'ip': '', 'durationtime': 0, 'starttime': time.time(), 'endtime':0, 'tag': '', 'log': '', 'root_span_flag':True, 'child_span': [] } return self.dic def record_save(self, span): currenttracer = {'id': span['spanid'], 'data': span} print(currenttracer) l.append(currenttracer) def record(self): self.span['servername'] = self.servername self.span['location'] = os.getcwd() + '.' + self.servername self.span['endtime'] = time.time() self.span['durationtime'] = self.span['endtime'] - self.span['starttime'] def setspantag(self,tag): self.span['tag'] = tag def setspanlog(self,log): self.span['log'] = log# 連續(xù)調(diào)用with Recorder(’server1’) as span: time.sleep(1) span.setspantag('test') #調(diào)用server1方法 print('server1') with Recorder(’server2’,span) as span1: time.sleep(2) # 調(diào)用server2方法 print('server2') with Recorder(’server3’,span1) as span2: time.sleep(0.5) # 調(diào)用server3方法 print('server3')# 并級連續(xù)調(diào)用# with Recorder(’server1’) as span1:# time.sleep(1)# span1.setspantag('test')# #調(diào)用server1方法# print('server1')# with Recorder(’server2’,span1) as span2:# time.sleep(2)# # 調(diào)用server2方法# print('server2')# with Recorder(’server3’,span1) as span3:# time.sleep(0.5)# # 調(diào)用server3方法# print('server3')# #單獨調(diào)用記錄# with Recorder(’server4’) as span_test1:# time.sleep(1.5)# print('server4')## with Recorder(’server5’) as span_test2:# time.sleep(2)# print('server5')

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 99久久精品免费看国产小宝寻花 | 亚洲精品视频一区二区三区 | 成人午夜免费福利视频 | 天天玩天天干天天操 | 成人在线观看免费 | 久久免费视频观看 | 国产成人在线一区二区 | 国产精品久久久久久影院8一贰佰 | 国产在线一区二区 | 一区二区高清 | 中文天堂在线一区 | 久久99精品久久久 | 欧美性网站| 黑人精品xxx一区一二区 | 欧美日韩精品中文字幕 | 伊人网站在线 | 中文字字幕一区二区三区四区五区 | 日韩欧美在线观看视频网站 | 2022精品国偷自产免费观看 | 精品久久久久一区二区国产 | 亚洲激情综合 | 人人干人人干人人 | 久久99视频精品 | 亚洲一区二区三区免费观看 | 亚洲美女一区 | 精品一区二区三区四区在线 | 亚洲成人网在线 | 国产一区二区三区在线视频 | 91av在线不卡 | 亚洲福利在线视频 | 91观看| 日韩成年人视频在线 | 日本久久福利 | 日韩91在线 | 欧美操操操 | 久久精品国产一区二区三区 | 国产福利在线播放麻豆 | 日韩精品在线观看一区二区三区 | 日日日操 | 中文字幕久久精品 | a久久久久久 |