使用python3抓取pinpoint應用資訊入庫
使用python3抓取pinpoint應用資訊入庫
Pinpoint是用Java編寫的大型分散式系統的APM(應用程式效能管理)工具。 受Dapper的啟發,Pinpoint提供了一種解決方案,通過在分散式應用程式中跟蹤事務來幫助分析系統的整體結構以及它們中的元件之間的相互關係.
pinpoint api:
- /applications.pinpoint 獲取applications基本資訊
- /getAgentList.pinpoint 獲取對應application agent資訊
- /getServerMapData.pinpoint 獲取對應app 基本資料流資訊
db.py
import mysql.connector
class MyDB(object):
"""docstring for MyDB"""
def __init__(self, host, user, passwd , db):
self.host = host
self.user = user
self.passwd = passwd
self.db = db
self.connect = None
self.cursor = None
def db_connect(self):
"""資料庫連線
"""
self.connect = mysql.connector.connect(host=self.host, user=self.user, passwd=self.passwd, database=self.db)
return self
def db_cursor(self):
if self.connect is None:
self.connect = self.db_connect()
if not self.connect.is_connected():
self.connect = self.db_connect()
self.cursor = self.connect.cursor()
return self
def get_rows(self , sql):
""" 查詢資料庫結果
:param sql: SQL語句
:param cursor: 資料庫遊標
"""
self.cursor.execute(sql)
return self.cursor.fetchall()
def db_execute(self, sql):
self.cursor.execute(sql)
self.connect.commit()
def db_close(self):
"""關閉資料庫連線和遊標
:param connect: 資料庫連線例項
:param cursor: 資料庫遊標
"""
if self.connect:
self.connect.close()
if self.cursor:
self.cursor.close()
pinpoint.py:
# -*- coding: utf-8 -*-
```
Copyright (c) 2018, mersap
All rights reserved.
摘 要: pinpoint.py
創 建 者: mersap
建立日期: 2019-01-17
```
import sys
import requests
import time
import datetime
import json
sys.path.append(`../Golf`)
import db #db.py
PPURL = "https://pinpoint.*******.com"
From_Time = datetime.datetime.now() + datetime.timedelta(seconds=-60)
To_Time = datetime.datetime.now()
From_TimeStamp = int(time.mktime(From_Time.timetuple()))*1000
To_TimeStamp = int(time.mktime(datetime.datetime.now().timetuple()))*1000
class PinPoint(object):
"""docstring for PinPoint"""
def __init__(self, db):
self.db = db
super(PinPoint, self).__init__()
"""獲取pinpoint中應用"""
def get_applications(self):
```return application dict
```
applicationListUrl = PPURL + "/applications.pinpoint"
res = requests.get(applicationListUrl)
if res.status_code != 200:
print("請求異常,請檢查")
return
applicationLists = []
for app in res.json():
applicationLists.append(app)
applicationListDict={}
applicationListDict["applicationList"] = applicationLists
return applicationListDict
def getAgentList(self, appname):
AgentListUrl = PPURL + "/getAgentList.pinpoint"
param = {
`application`:appname
}
res = requests.get(AgentListUrl, params=param)
if res.status_code != 200:
print("請求異常,請檢查")
return
return len(res.json().keys()),json.dumps(list(res.json().keys()))
def update_servermap(self, appname , from_time=From_TimeStamp,
to_time=To_TimeStamp, serviceType=`SPRING_BOOT`):
```更新app上下游關係
:param appname: 應用名稱
:param serviceType: 應用型別
:param from_time: 起始時間
:param to_time: 終止時間
:
```
#https://pinpoint.*****.com/getServerMapData.pinpoint?applicationName=test-app&from=1547721493000&to=1547721553000&callerRange=1&calleeRange=1&serviceTypeName=TOMCAT&_=1547720614229
param = {
`applicationName`:appname,
`from`:from_time,
`to`:to_time,
`callerRange`:1,
`calleeRange`:1,
`serviceTypeName`:serviceType
}
# serverMapUrl = PPURL + "/getServerMapData.pinpoint"
serverMapUrl = "{}{}".format(PPURL, "/getServerMapData.pinpoint")
res = requests.get(serverMapUrl, params=param)
if res.status_code != 200:
print("請求異常,請檢查")
return
update_time = time.strftime(`%Y-%m-%d %H:%M:%S`,time.localtime(time.time()))
links = res.json()["applicationMapData"]["linkDataArray"]
for link in links :
###排除test的應用
if link[`sourceInfo`][`applicationName`].startswith(`test`):
continue
#應用名稱、應用型別、下游應用名稱、下游應用型別、應用節點數、下游應用節點數、總請求數、 錯誤請求數、慢請求數(本應用到下一個應用的數量)
application = link[`sourceInfo`][`applicationName`]
serviceType = link[`sourceInfo`][`serviceType`]
to_application = link[`targetInfo`][`applicationName`]
to_serviceType = link[`targetInfo`][`serviceType`]
agents = len(link.get(`fromAgent`,` `))
to_agents = len(link.get(`toAgent`,` `))
totalCount = link[`totalCount`]
errorCount = link[`errorCount`]
slowCount = link[`slowCount`]
sql = """
REPLACE into application_server_map (application, serviceType,
agents, to_application, to_serviceType, to_agents, totalCount,
errorCount,slowCount, update_time, from_time, to_time)
VALUES ("{}", "{}", {}, "{}", "{}", {}, {}, {}, {},"{}","{}",
"{}")""".format(
application, serviceType, agents, to_application,
to_serviceType, to_agents, totalCount, errorCount,
slowCount, update_time, From_Time, To_Time)
self.db.db_execute(sql)
def update_app(self):
"""更新application
"""
appdict = self.get_applications()
apps = appdict.get("applicationList")
update_time = time.strftime(`%Y-%m-%d %H:%M:%S`,time.localtime(time.time()))
for app in apps:
if app[`applicationName`].startswith(`test`):
continue
agents, agentlists = self.getAgentList(app[`applicationName`])
sql = """
REPLACE into application_list( application_name,
service_type, code, agents, agentlists, update_time)
VALUES ("{}", "{}", {}, {}, `{}`, "{}");""".format(
app[`applicationName`], app[`serviceType`],
app[`code`], agents, agentlists, update_time)
self.db.db_execute(sql)
return True
def update_all_servermaps(self):
"""更新所有應用數
"""
appdict = self.get_applications()
apps = appdict.get("applicationList")
for app in apps:
self.update_servermap(app[`applicationName`], serviceType=app[`serviceType`])
###刪除7天前資料
Del_Time = datetime.datetime.now() + datetime.timedelta(days=-7)
sql = """delete from application_server_map where update_time <= "{}"
""".format(Del_Time)
self.db.db_execute(sql)
return True
def connect_db():
""" 建立SQL連線
"""
mydb = db.MyDB(
host="rm-*****.mysql.rds.aliyuncs.com",
user="user",
passwd="passwd",
db="pinpoint"
)
mydb.db_connect()
mydb.db_cursor()
return mydb
def main():
db = connect_db()
pp = PinPoint(db)
pp.update_app()
pp.update_all_servermaps()
db.db_close()
if __name__ == `__main__`:
main()
- 附sql語句
CREATE TABLE `application_list` (
`application_name` varchar(32) NOT NULL,
`service_type` varchar(32) DEFAULT NULL COMMENT `服務型別`,
`code` int(11) DEFAULT NULL COMMENT `服務型別程式碼`,
`agents` int(11) DEFAULT NULL COMMENT `agent個數`,
`agentlists` varchar(256) DEFAULT NULL COMMENT `agent list`,
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT `更新時間`,
PRIMARY KEY (`application_name`),
UNIQUE KEY `Unique_App` (`application_name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=`pinpoint app list`
CREATE TABLE `application_server_map` (
`application` varchar(32) NOT NULL COMMENT `應用名稱`,
`serviceType` varchar(8) NOT NULL,
`agents` int(2) NOT NULL COMMENT `agent個數`,
`to_application` varchar(32) NOT NULL COMMENT `下游服務名稱`,
`to_serviceType` varchar(32) DEFAULT NULL COMMENT `下游服務型別`,
`to_agents` int(2) DEFAULT NULL COMMENT `下游服務agent數量`,
`totalCount` int(8) DEFAULT NULL COMMENT `總請求數`,
`errorCount` int(8) DEFAULT NULL,
`slowCount` int(8) DEFAULT NULL,
`update_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP,
`from_time` datetime DEFAULT NULL,
`to_time` datetime DEFAULT NULL,
PRIMARY KEY (`application`,`to_application`),
UNIQUE KEY `Unique_AppMap` (`application`,`to_application`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=`應用鏈路資料`
相關文章
- 18.2 使用NPCAP庫抓取資料包PCA
- 使用python3抓取鏈家二手房資料Python
- 使用scrapy抓取Youtube播放列表資訊
- 使用Scrapy抓取新浪微博使用者資訊
- 在phpmyadmin中使用pinpointPHP
- 用python抓取智聯招聘資訊並存入excelPythonExcel
- 如何搭建一個智慧客服(三):NLP裡實體資訊的抓取與應用
- colly 自動抓取資訊
- 如何抓取網頁資訊?網頁
- 用Java抓取天眼查公開失信人員資訊Java
- 使用汽車應用庫構建應用
- Go Web 程式設計入門--應用資料庫GoWeb程式設計資料庫
- 爬蟲app資訊抓取之apk反編譯抓取爬蟲APPAPK編譯
- 使用 Bytebase 管理 Rainbond 上的應用資料庫AI資料庫
- Python中使用mechanize庫抓取網頁上的表格資料Python網頁
- Python爬蟲抓取股票資訊Python爬蟲
- Python爬蟲抓取知乎所有使用者資訊Python爬蟲
- 應用適配資料庫還是資料庫適配應用資料庫
- 應用效能管理の巔峰對決:Apache Skywalking P.K. PinpointApache
- 2.8 使用資料庫服務管理應用負載資料庫負載
- 使用dbunit測試spring + mybatis的資料庫應用SpringMyBatis資料庫
- Pinpoint 編譯環境搭建(Pinpoint系列一)編譯
- 【Python3網路爬蟲開發實戰】3-基本庫的使用-4抓取貓眼電影排行Python爬蟲
- [知識圖譜實戰篇] 一.資料抓取之Python3抓取JSON格式的電影實體PythonJSON
- 使用ArcGIS連線瀚高資料庫與地理資訊的匯入資料庫
- Python3爬蟲資料入資料庫---把爬取到的資料存到資料庫,帶資料庫去重功能Python爬蟲資料庫
- 使用Amazon Pinpoint對使用者行為追蹤
- 如何在 SAP BTP Java 應用裡使用 SQLite 資料庫JavaSQLite資料庫
- 3.07 EOS資料庫應用資料庫
- 向量資料庫Chromadb的入門資訊資料庫
- oracle資料庫資料字典應用Oracle資料庫
- 把業務邏輯寫入應用程式,而不是資料庫資料庫
- iOS 應用版本資訊 BundleVersioniOS
- 企業微信-自建H5應用授權登入獲取使用者資訊H5
- 如何在 SAP BTP Java 應用裡使用 SAP HANA 資料庫Java資料庫
- Python3資料庫操作基本類Python資料庫
- 資料庫應用優化(一)資料庫優化
- 匿名IP在網路抓取中的應用探索