Telemetry獲取網絡設備CPU信息


交換機配置:

int g1/0/0
un sh
int vlani 1
ip add 192.168.56.177
q

stel s e
user-i v 4
auth aaa
pro in ssh
u p l 3
q
ssh user python
ssh user python auth password
ssh user python ser stel

aaa
local-user python password irreversible-cipher Huawei@123
local-user python service-type ssh
local-user python user-group manage-ug
q
#進入Telemetry視圖
telemetry
#配置設備推送目標,目標組Dest1,推送目標IP地址192.168.56.1,端口為20000
destination-group Dest1
ipv4-address 192.168.56.1 port 20000 protocol grpc no-tls
#配置設備采樣數據
#當用戶配置Telemetry靜態訂閱采樣數據時,需要創建采樣傳感器組,並指定好采樣路徑。
#本例中創建采樣組Sensor1,采樣路徑為CPU信息
#采樣路徑見:telemetry\CloudEngine 16800, 12800, 9800, 8800, 6800, 5800 V200R021C00 Telemetry性能指標集.xlsx
sensor-group Sensor1
sensor-path huawei-devm:devm/cpuInfos/cpuInfo
#創建訂閱,將配置好的上送目標組和采樣傳感器組進行關聯,完成數據上送。
#本例中關聯目標組Dest1與傳感器組Sensor1,並設置采樣間隔為1000ms
subscription Sub1
destination-group Dest1
sensor-group Sensor1 sample-interval 1000
commit
q
q

  

 

配置步驟:
1、搭建環境,完成實驗環境准備
2、配置設備Telemetry靜態訂閱方式想着配置,包括采集內容、推送對象和推送間隔
3、官網下載華為設備對應發布的.proto文件。
華為企業用戶下載地址:http://support.huawei.com/enterprise
運營商用戶下載地址:http://support.huawei.com/carrier
搜索相應的設備型號及版本號
軟件——版本及補丁
采樣路徑見:telemetry\CloudEngine 16800, 12800, 9800, 8800, 6800, 5800 V200R021C00 Telemetry性能指標集.xlsx
編譯proto文件得到服務端調用方法
本例中,使用run_codegen.py腳本編譯proto文件。注意將所有.proto文件放入/protos目錄
本腳本將一次編譯huawei-grpc-dialout.proto、huawei-telemetry.proto和huawei-devm.proto
4、編寫服務端代碼,監聽指定端口獲取數據
5、根據上送數據的不同,選擇對應的方法對數據內容進行解碼

在文件目錄下創建一個protos文件夾,將huawei-grpc-dialout.proto、huawei-telemetry.proto和huawei-devm.proto放到protos文件夾下

Generate_codes代碼:編譯.proto文件
#!/usr/bin
# _*_ coding: UTF-8 _*_
# Copyright (c) 2021 GengYu.All rights reserved
# @Create by gengyu
# @Create Time :2021/12/18
# @File Name : Generate_codes
# 打包命令 pyinstaller -F package\Generate_codes
"""
generates protocol messages and gRPC stubs.
"""
__author__ = 'Administrator'
from grpc_tools import protoc


protoc.main(
    (
        '',
        '-I./protos',
        '--python_out=.',
        '--grpc_python_out=.',
        './protos/huawei-grpc-dialout.proto',#文件路徑
    )
)

protoc.main(
    (
        '',
        '-I./protos',
        '--python_out=.',
        '--grpc_python_out=.',
        './protos/huawei-telemetry.proto',#文件路徑
    )
)

protoc.main(
    (
        '',
        '-I./protos',
        '--python_out=.',
        '--grpc_python_out=.',
        './protos/huawei-devm.proto',#文件路徑
    )
)

 

telemetry_server.py代碼:運行即可接收交換機推送的信息
#!/usr/bin
# _*_ coding: UTF-8 _*_
# Copyright (c) 2021 GengYu.All rights reserved
# @Create by gengyu
# @Create Time :2021/12/18
# @File Name : telemetry_server
# 打包命令 pyinstaller -F package\telemetry_server
"""

"""
__author__ = 'Administrator'

import doctest

from concurrent import futures
import time
import importlib
import grpc#pip 安裝
import huawei_grpc_dialout_pb2_grpc#generate_codes.py生成
import huawei_telemetry_pb2#generate_codes.py生成

_ONE_DAY_IN_SECONDS = 60 * 60 * 24
def tele_server():
    #創建一個grpc server對象
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    #注冊huawei的telemetry 數據監聽服務
    huawei_grpc_dialout_pb2_grpc.add_gRPCDataserviceServicer_to_server(
        Telemetry_CPU_Info(),server)
    #設置socket監聽端口和PC的IP地址,與交換機中推送目標IP地址一致
    server.add_insecure_port('192.168.56.1:20000')
    #啟動 grpc server
    server.start()
    #死循環監聽
    try:
        while True:
            time.sleep(_ONE_DAY_IN_SECONDS)
    except KeyboardInterrupt:
        server.stop(0)

#創建類繼承huawei_grpc_dialout_pb2_grpc中的Servicer方法
class Telemetry_CPU_Info(huawei_grpc_dialout_pb2_grpc.gRPCDataserviceServicer):
    def __init__(self):
        return
    def dataPublish(self, request_iterator, context):
        for i in request_iterator:
            print('________________________ start ________________________')
            telemetry_data = huawei_telemetry_pb2.Telemetry.FromString(i.data)
            print(telemetry_data)
            for row_data in telemetry_data.data_gpb.row:
                print('________________________')
                print('The proto path is :' + telemetry_data.proto_path)
                print('________________________')
                module_name = telemetry_data.proto_path.split('.')[0]
                root_class = telemetry_data.proto_path.split('.')[1]
#動態加載telemetry 獲取數據的對應模塊,本例中為:
                decode_module = importlib.import_module(module_name + '_pb2')
                print(decode_module)
#定義解碼方法:getattr獲取動態加載的模塊中的屬性值,調用此屬性的解碼方法FromString
                decode_func = getattr(decode_module,root_class).FromString
                print('________________________ content is ________________________\n')
                #將row_data中的content中的內容使用此方法解碼,並輸出
                print(decode_func(row_data.content))
                print('________________________ done ________________________')

if __name__ == "__main__":
    tele_server()

 

 

運行結果:

________________________ start ________________________
node_id_str: "HUAWEI"
subscription_id_str: "Sub1"
sensor_path: "huawei-devm:devm/cpuInfos/cpuInfo"
collection_id: 13
collection_start_time: 1639850454743
msg_timestamp: 1639850454847
data_gpb {
row {
timestamp: 1639850454743
content: "*\022\n\020\"\0011\010\201\200\204\010(\n\030Z0K\020\010"
}
row {
timestamp: 1639850454743
content: "*\023\n\021\"\00217\010\201\200\304\010(\013\030Z0K\020\010"
}
}
collection_end_time: 1639850454743
current_period: 10000
except_desc: "OK"
product_name: "CE12800"
proto_path: "huawei_devm.Devm"

________________________
The proto path is :huawei_devm.Devm
________________________
<module 'huawei_devm_pb2' from 'C:\\Users\\Administrator\\PycharmProjects\\python_switch\\telemetry\\huawei_devm_pb2.py'>
________________________ content is ________________________

cpuInfos {
cpuInfo {
entIndex: 16842753
interval: 8
ovloadThreshold: 90
position: "1"
systemCpuUsage: 10
unovloadThreshold: 75
}
}

________________________ done ________________________
________________________
The proto path is :huawei_devm.Devm
________________________
<module 'huawei_devm_pb2' from 'C:\\Users\\Administrator\\PycharmProjects\\python_switch\\telemetry\\huawei_devm_pb2.py'>
________________________ content is ________________________

cpuInfos {
cpuInfo {
entIndex: 17891329
interval: 8
ovloadThreshold: 90
position: "17"
systemCpuUsage: 11
unovloadThreshold: 75
}
}

________________________ done ________________________





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM