日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Python函數調用追蹤實現代碼

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

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

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

我實現了一種簡單的調用追蹤。

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 # 退出方法中,用來實現善后處理工作 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# 連續調用with Recorder(’server1’) as span: time.sleep(1) span.setspantag('test') #調用server1方法 print('server1') with Recorder(’server2’,span) as span1: time.sleep(2) # 調用server2方法 print('server2') with Recorder(’server3’,span1) as span2: time.sleep(0.5) # 調用server3方法 print('server3')#單獨調用記錄with Recorder(’server4’) as span_test1: time.sleep(1.5) print('server4')with Recorder(’server5’) as span_test2: time.sleep(2) print('server5')

運行結果:

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}}

關于下一步,會使用redis存儲其結果,并進行相應的輸出分析。

修過不能追蹤同級調用的問題

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 # 退出方法中,用來實現善后處理工作 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# 連續調用with Recorder(’server1’) as span: time.sleep(1) span.setspantag('test') #調用server1方法 print('server1') with Recorder(’server2’,span) as span1: time.sleep(2) # 調用server2方法 print('server2') with Recorder(’server3’,span1) as span2: time.sleep(0.5) # 調用server3方法 print('server3')# 并級連續調用# with Recorder(’server1’) as span1:# time.sleep(1)# span1.setspantag('test')# #調用server1方法# print('server1')# with Recorder(’server2’,span1) as span2:# time.sleep(2)# # 調用server2方法# print('server2')# with Recorder(’server3’,span1) as span3:# time.sleep(0.5)# # 調用server3方法# print('server3')# #單獨調用記錄# with Recorder(’server4’) as span_test1:# time.sleep(1.5)# print('server4')## with Recorder(’server5’) as span_test2:# time.sleep(2)# print('server5')

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
免费观看在线综合色| 首页欧美精品中文字幕| 丝袜美腿一区| 欧美日韩精品一本二本三本 | 国产精品久久亚洲不卡| 国产精品宾馆| 久久97视频| 久久精品卡一| 欧洲激情综合| 亚洲69av| 精品国产一区二| 日韩精品诱惑一区?区三区| 精品欧美日韩精品| 成人在线网站| 蜜桃久久av| 国产精品videossex| 麻豆国产在线| 在线亚洲精品| 欧美一区在线观看视频| 久久精品资源| 国内精品福利| 日韩精品免费一区二区夜夜嗨 | 久久国际精品| 成人黄色av| 国产亚洲亚洲| 国产精品欧美日韩一区| 神马久久午夜| 亚洲一区黄色| 国产精品极品| 1024精品一区二区三区| 一区二区三区四区在线观看国产日韩 | 日韩中文在线电影| 亚洲欧洲另类| 美日韩一区二区三区| 欧美少妇精品| 日本不卡视频一二三区| 国产精品久久久久久久免费观看 | 香蕉国产精品| 国产免费播放一区二区| 久久亚洲国产| 欧美亚洲综合视频| 欧美大黑bbbbbbbbb在线| 日韩手机在线| 欧美国产偷国产精品三区| 视频一区二区中文字幕| 91综合视频| 日韩福利视频导航| 亚洲特色特黄| 国产一区福利| 免费成人在线观看| 美女av在线免费看| 欧美日本三区| 六月婷婷一区| 日韩大片在线观看| 国产欧美高清| 中文视频一区| 午夜欧美视频| 日韩精品dvd| 国产精品中文字幕制服诱惑| 在线国产一区二区| 日韩中文在线电影| 国产精品美女久久久久久不卡| 亚洲免费精品| 日韩激情一区| 久久中文在线| 国产日韩欧美一区| 最新亚洲国产| 亚洲作爱视频| 91精品91| 激情久久中文字幕| 欧美sm一区| 成人精品高清在线视频| 国产精品成人自拍| 日韩不卡免费视频| 免费欧美日韩| 婷婷六月综合| 蜜臀91精品国产高清在线观看 | 欧美激情在线精品一区二区三区| 中文视频一区| 六月丁香综合| 久久电影一区| 久久成人国产| 首页国产欧美久久| 蜜臀91精品一区二区三区| 亚洲欧美日韩精品一区二区| 136国产福利精品导航网址| 日韩另类视频| 香蕉视频亚洲一级| 日韩欧美精品| 私拍精品福利视频在线一区| 超碰超碰人人人人精品| 福利一区二区免费视频 | 亚洲精品第一| 蜜桃视频在线观看一区| 夜夜嗨av一区二区三区网站四季av| 亚洲精品一级二级| 久久精品中文| 精品一区毛片| 国产女优一区| 综合精品一区| 亚洲人妖在线| 日韩欧美精品一区二区综合视频| 亚洲精品影视| 国产日韩欧美三区| 国产成人精品亚洲线观看| 国产精品国产一区| 久久精品123| 亚洲欧美日韩在线观看a三区| 欧美专区在线| 日本欧美一区二区| 久久爱www成人| 日韩综合精品| 欧美日韩国产精品一区二区亚洲| 免费国产自线拍一欧美视频| 三级久久三级久久久| 欧美日韩亚洲一区三区| 欧美aⅴ一区二区三区视频| 樱桃视频成人在线观看| 99国产一区| 日本欧美大码aⅴ在线播放| 久久av综合| 欧美日韩色图| 日韩专区视频网站| 国产精品久久久久久久久久10秀| 欧美亚洲在线日韩| 香蕉久久国产| 欧美日韩 国产精品| 国产a亚洲精品| 自拍日韩欧美| 国产亚洲精品精品国产亚洲综合| 国产一区二区三区久久久久久久久| 日韩在线中文| 视频一区中文字幕精品| 九九久久国产| 最新亚洲激情| 国产精品久av福利在线观看| 日本不卡免费高清视频在线| 一本色道精品久久一区二区三区| 欧美在线首页| 久久中文字幕av一区二区不卡| 亚洲乱亚洲高清| 久久毛片亚洲| 日韩欧乱色一区二区三区在线| 精品九九久久| 伊人久久大香伊蕉在人线观看热v| 老司机精品视频网| 亚洲成人三区| 国语精品一区| 亚洲香蕉视频| 久久久久久网| 日韩一区二区三免费高清在线观看 | 精品伊人久久| 男女性色大片免费观看一区二区 | 日韩精品久久久久久久电影99爱| 亚洲伊人精品酒店| 正在播放日韩精品| 日韩精品高清不卡| 色老板在线视频一区二区| 7777精品| 午夜在线一区| 成人片免费看| 国产情侣一区在线| 99国内精品| 成人在线黄色| **爰片久久毛片| 欧美福利一区| 水蜜桃久久夜色精品一区| 日韩视频1区| 亚洲91视频| 免费在线亚洲欧美| 日韩精品一区二区三区中文在线 | 日韩在线视频一区二区三区| 亚洲成av人片一区二区密柚| 国产精品va| 日韩专区欧美专区| 午夜国产精品视频| 国产 日韩 欧美 综合 一区| 日韩精品社区| 另类国产ts人妖高潮视频| 神马午夜在线视频| 国产精品久久久久9999高清| 性一交一乱一区二区洋洋av| 9999国产精品| 麻豆一区在线| 国产调教一区二区三区| 男女性色大片免费观看一区二区| 欧洲一区二区三区精品| 国产精品大片| 日本久久一区| 亚洲免费影院| 欧美二区视频| 99国产精品免费视频观看| 精品国产精品国产偷麻豆 | 综合视频一区| 亚洲欧美日韩视频二区| 欧美日韩色图| 亚洲第一区色| 99久久久久国产精品| 亚洲综合电影| 成人台湾亚洲精品一区二区|