【问题标题】:Getting error cannot set filter: libpcap is not available. Cannot compile filter出现错误无法设置过滤器:libpcap 不可用。无法编译过滤器
【发布时间】: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


【解决方案1】:

您需要先安装libpcap。在 Ubuntu 20.04 上你可以执行:

apt install -y libpcap0.8

【讨论】:

    猜你喜欢
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    相关资源
    最近更新 更多