【发布时间】:2021-10-31 17:20:08
【问题描述】:
我有这个 Python 代码可以从 MySQL 服务器上抓取指标,这个抓取工具在 Linux 51f85403cce2 5.11.0-38-generic #42~20.04.1-Ubuntu SMP Tue Sep 28 20:41:07 UTC 2021 x86_64 Linux 上运行
这是我正在运行的 Python 代码:
from prometheus_client import start_http_server, Gauge
from multiprocessing import Process, Manager
import time
import string
from scapy.all import *
import re
def func1(select, insert, delete, update, lock):
def pkt_callback(pkt):
pkt.show()
ts = int(time.time())
if Raw in pkt:
if 'select' in pkt.getlayer(Raw).load.lower():
select.append(ts)
if 'insert' in pkt.getlayer(Raw).load.lower():
insert.append(ts)
if 'update' in pkt.getlayer(Raw).load.lower():
update.append(ts)
if 'delete' in pkt.getlayer(Raw).load.lower():
delete.append(ts)
if 'lock' in pkt.getlayer(Raw).load.lower():
lock.append(ts)
print str(pkt.getlayer(Raw).load)
sniff(prn=pkt_callback, filter='dst port 3306', store=0)
def statement_list(statement, ts):
for item in statement:
if item < ts:
statement.remove(item)
def func2(select, insert, delete, update, lock):
while True:
ts = int(time.time())-30
statement_list(select, ts)
statement_list(insert, ts)
statement_list(update, ts)
statement_list(delete, ts)
statement_list(lock, ts)
time.sleep(1)
def func3(select, insert, delete, update, lock):
start_http_server(9100)
print 'Started on port 9100'
select_statement = Gauge('select_statements', '')
insert_statement = Gauge('insert_statements', '')
delete_statement = Gauge('delete_statements','')
update_statement = Gauge('update_statements','')
lock_statement = Gauge('lock_statements','')
while True:
select_statement.set(len(select))
insert_statement.set(len(insert))
delete_statement.set(len(delete))
update_statement.set(len(update))
lock_statement.set(len(lock))
time.sleep(1)
def runInParallel(*fns):
with Manager() as manager:
select = manager.list()
insert = manager.list()
delete = manager.list()
update = manager.list()
lock = manager.list()
proc = []
for fn in fns:
p = Process(target=fn, args=[select, insert, delete, update, lock])
p.start()
proc.append(p)
for p in proc:
p.join()
runInParallel(func1, func2, func3)
我不明白为什么它会抛出错误
# python mysql-stats.py
Started on port 9100
ERROR: Cannot set filter: libpcap is not available. Cannot compile filter !
###[ Ethernet ]###
而且我没有刮到任何东西。
【问题讨论】:
-
请说明您使用的是哪个操作系统?这是有关如何在 macOS 上修复它的说明。 stackoverflow.com/questions/65030510/…
-
你好@PavelSapezhka 它在
Linux 51f85403cce2 5.11.0-38-generic #42~20.04.1-Ubuntu SMP Tue Sep 28 20:41:07 UTC 2021 x86_64 Linux上运行 -
»» libpcap 不可用。无法编译过滤器««:出于编译目的,“libpcap”(或 -lpcap)为
libpcap.so→ 请安装开发包 =sudo apt install libpcap-dev。 -
@KnudLarsen 你是怎么得到这个的?我已经在孤立的新鲜 Ubuntu 20.04 上检查过它 - 开发包中不需要,只有二进制文件。
-
对不起,这只是关于“编译”的一般考虑:我没有检查 python 代码。
标签: python prometheus libpcap