首页 > 编程语言 > pushgateway python脚本

pushgateway python脚本

时间:2022-10-03 01:14:42浏览次数:52  
标签:脚本 get python ip dic 网卡 pushgateway key net

vim get_network.py

import prometheus_client
from prometheus_client import Counter
from prometheus_client import Gauge
from prometheus_client.core import CollectorRegistry
import psutil
import time
import requests
import socket

def get_key():
    key_info = psutil.net_io_counters(pernic=True).keys()

    recv = {}
    sent = {}

    for key in key_info:
        recv.setdefault(key, psutil.net_io_counters(pernic=True).get(key).bytes_recv)
        sent.setdefault(key, psutil.net_io_counters(pernic=True).get(key).bytes_sent)

    return key_info, recv, sent


def get_rate(func):
    import time

    key_info, old_recv, old_sent = func()

    time.sleep(1)

    key_info, now_recv, now_sent = func()

    net_in = {}
    net_out = {}

    for key in key_info:
        # float('%.2f' % a)
        # net_in.setdefault(key, float('%.2f' %((now_recv.get(key) - old_recv.get(key)) / 1024)))
        # net_out.setdefault(key, float('%.2f' %((now_sent.get(key) - old_sent.get(key)) / 1024)))

        # 计算流量
        net_in.setdefault(key, now_recv.get(key) - old_recv.get(key))
        net_out.setdefault(key, now_sent.get(key) - old_sent.get(key))

    return key_info, net_in, net_out

# def get_host_ip():
#     """
#     查询本机ip地址,针对单网卡
#     :return: ip
#     """
#     try:
#         s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#         s.connect(('8.8.8.8', 80))
#         ip = s.getsockname()[0]
#     finally:
#         s.close()
#         return ip

# 打印多网卡 mac 和 ip 信息
def PrintNetIfAddr():
    dic = psutil.net_if_addrs()
    net_dic = {}
    net_dic['no_ip'] = []  # 无ip的网卡列表
    for adapter in dic:
        snicList = dic[adapter]
        mac = '无 mac 地址'
        ipv4 = '无 ipv4 地址'
        ipv6 = '无 ipv6 地址'
        for snic in snicList:
            if snic.family.name in {'AF_LINK', 'AF_PACKET'}:
                mac = snic.address
            elif snic.family.name == 'AF_INET':
                ipv4 = snic.address
            elif snic.family.name == 'AF_INET6':
                ipv6 = snic.address
        # print('%s, %s, %s, %s' % (adapter, mac, ipv4, ipv6))

        # 判断网卡名不在net_dic中时,并且网卡不是lo
        if adapter not in net_dic and adapter != 'lo':
            if not ipv4.startswith("无"):  # 判断ip地址不是以无开头
                net_dic[adapter] = ipv4  # 增加键值对
            else:
                net_dic['no_ip'].append(adapter)  # 无ip的网卡

    # print(net_dic)
    return net_dic

key_info, net_in, net_out = get_rate(get_key)

# ip=get_host_ip()  # 本机ip
hostname = socket.gethostname() # 主机名

REGISTRY = CollectorRegistry(auto_describe=False)
input = Gauge("network_traffic_input", hostname,['adapter_name','unit','ip','instance'],registry=REGISTRY)  # 流入
output = Gauge("network_traffic_output", hostname,['adapter_name','unit','ip','instance'],registry=REGISTRY)  # 流出


for key in key_info:
    net_addr = PrintNetIfAddr()
    # 判断网卡不是lo(回环网卡)以及 不是无ip的网卡
    if key != 'lo' and  key not in net_addr['no_ip']:
        # 流入和流出
        input.labels(ip=net_addr[key],adapter_name=key, unit="Byte",instance=hostname).inc(net_in.get(key))
        output.labels(ip=net_addr[key],adapter_name=key, unit="Byte",instance=hostname).inc(net_out.get(key))

requests.post("http://192.168.91.132:9091/metrics/job/network_traffic",data=prometheus_client.generate_latest(REGISTRY))
print("发送了一次网卡流量数据")

标签:脚本,get,python,ip,dic,网卡,pushgateway,key,net
From: https://www.cnblogs.com/tengfei520/p/16749841.html

相关文章

  • pushgateway shell脚本
    vimpush_memory.sh#!/bin/bash#descpushmemoryinfototal_memory=$(free|awk'/Mem/{print$2}')used_memory=$(free|awk'/Mem/{print$3}')job_name="p......
  • Python+Django+Nginx的从0到1的个人网站搭建
    前言本文以实现最终结果为导向,对知识点不做过多阐述。流程中有任何问题请及时面向搜索程序或他人解决问题。一、准备工作Python的下载Python下载地址不会安装的......
  • U盘插入自动读写/U盘插入自动复制/python检测U盘的插入,以及进行自动复制文件并写入文
    U盘自动读写的小玩意共有四种方法(我了解的,全是转载)方法一(vbs方法全自动,转载自bilibili 点我跳转)文件下载链接(点我下载)方法二(cmd方法需手动,转载自bilibili点我跳转)文......
  • Python语法之元组
    元组和列表其实很像,区别主要在于元组创建完成后,不能被修改。创建元组很简单,只需要将用逗号分隔的元素放到 ()中,(元素1,元素2,元素3,...,元素n),如果元素为字符串,别忘记添加......
  • python 导出excel,以文件流形式返回前端
    python中使用xlwt库导出excel1.安装依赖包pipinstallxlwt2.写入Excel数据返回前端importxlwtfromflaskimportFlaskapp=Flask(__name__)@app.route('/a......
  • python matplotlib 画图神器
    Matplotlib是Python的一个绘图库。它包含了大量的工具,你可以使用这些工具创建各种图形,包括简单的散点图,正弦曲线,甚至是三维图形。Matplotlib 和Matlab的绘图功能相似,但......
  • 为python编译C++模块时一定要注意的事情—————不要在anaconda环境下使用cmake来编
    平时搞python的人很多都会有安装C++扩展模块的需求,而往往这些C++模块都是使用CMAKE做编译配置的,但是如果你这时候shell环境是使用anaconda的话,那么cmake默认调用的GCC和G++......
  • python 列表
    1.1列表列表就像是一个“打了激素”的数组,由于Python的变量没有数据类型,所以python的"数组"可以存放不同类型的变量,例如:[1,2,3,4,5,"上山打老虎"]可以为他加上一个变量......
  • python抽象类
    python抽象类Python本身不具有抽象类,通过导入abc模块可以另一抽象类和抽象方法。fromabcimportabstractmethod,ABCMetaclassBase(metaclass=ABCMeta):@abs......
  • AES加密算法原理及python实现
    AES对称加密算法  AES加密算法即密码学中的高级加密标准(AdvancedEncryptionStandard,AES),又称Rijndael加密法(2000年10月2日,比利时密码专家JoanDaemen和VincentRijmen提......