入门教程:常用的 Python 第三方库:python-logstash

Logstash 本身是一个数据处理管道工具(主要通过配置文件运行),官方并没有提供专门的 Python SDK。不过,Python 应用程序可以通过多种方式与 Logstash 交互(如 TCP/UDP 协议发送数据、调用 Logstash 的 HTTP API 等),其中最常用的是通过第三方库简化日志发送流程。

常用的 Python 第三方库:python-logstash

python-logstash 是一个轻量级库,可帮助 Python 应用程序向 Logstash 发送结构化日志,支持标准的 logging 模块集成。

详细安装与使用教程

步骤 1:安装 python-logstash

通过 pip 安装库:

bash 复制代码
pip install python-logstash

步骤 2:配置 Logstash 接收数据

Logstash 需要配置输入插件(Input)来接收 Python 发送的数据。这里以 TCP 输入插件 为例(最常用),创建一个 Logstash 配置文件(例如 logstash-python.conf):

conf 复制代码
input {
  # 配置 TCP 输入,监听 5959 端口(可自定义)
  tcp {
    port => 5959
    codec => json_lines  # 解析 JSON 格式的日志
  }
}

filter {
  # 可选:添加过滤规则(如添加字段、转换格式等)
  mutate {
    add_field => { "source" => "python-app" }  # 增加一个来源标识字段
  }
}

output {
  # 输出到控制台(测试用)
  stdout { codec => rubydebug }
  
  # 可选:输出到 Elasticsearch(需提前部署)
  # elasticsearch {
  #   hosts => ["http://localhost:9200"]
  #   index => "python-logs-%{+YYYY.MM.dd}"
  # }
}

步骤 3:启动 Logstash

使用上述配置文件启动 Logstash(确保已安装 Logstash 并配置环境变量):

bash 复制代码
logstash -f logstash-python.conf

启动成功后,Logstash 会监听 5959 端口,等待接收 JSON 格式的日志数据。

步骤 4:Python 代码发送日志到 Logstash

使用 python-logstash 库结合 Python 标准 logging 模块发送日志,示例代码如下:

python 复制代码
import logging
import logstash
import time

# 配置日志记录器
logger = logging.getLogger('python-logstash-logger')
logger.setLevel(logging.INFO)

# 连接到 Logstash(参数说明:
# host:Logstash 服务器 IP(本地为 localhost)
# port:Logstash 配置中 tcp 输入的端口(即 5959)
# version:Logstash 日志格式版本(1 或 0,默认 0)
logger.addHandler(logstash.TCPLogstashHandler(
    host='localhost',
    port=5959,
    version=1
))

# 发送不同级别和格式的日志
if __name__ == "__main__":
    # 基本文本日志
    logger.info('这是一条普通信息日志')
    
    # 带额外字段的结构化日志
    extra = {
        'user_id': '12345',
        'action': 'login',
        'duration': 1.23  # 操作耗时(秒)
    }
    logger.warning('用户登录警告', extra=extra)
    
    # 错误日志
    try:
        1 / 0
    except Exception as e:
        logger.error('发生计算错误', exc_info=True, extra={'error_type': 'division_by_zero'})
    
    time.sleep(1)  # 确保日志发送完成

步骤 5:验证结果

运行 Python 代码后,查看 Logstash 启动窗口的输出,会看到类似以下的日志信息(rubydebug 格式):

ini 复制代码
{
       "message" => "这是一条普通信息日志",
      "@version" => "1",
    "@timestamp" => "2025-10-01T08:00:00.000Z",
          "host" => "localhost",
        "source" => "python-app",
          "level" => "INFO"
}

# 带额外字段的日志会包含 user_id、action 等字段

其他交互方式

如果不想使用第三方库,也可以通过 Python 直接向 Logstash 发送数据:

  • TCP 直接发送 :使用 socket 库建立 TCP 连接,发送 JSON 字符串。
  • HTTP 发送 :若 Logstash 配置了 http 输入插件,可通过 requests 库发送 POST 请求。

示例(TCP 直接发送,无需 python-logstash):

python 复制代码
import socket
import json
import time

# 连接 Logstash 的 TCP 端口
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 5959))

# 发送 JSON 格式日志
log_data = {
    'message': '直接通过 TCP 发送的日志',
    'level': 'DEBUG',
    'timestamp': time.time()
}
s.sendall((json.dumps(log_data) + '\n').encode('utf-8'))

s.close()

注意事项

  1. Logstash 的端口和 IP 需与 Python 代码中的配置一致。
  2. 确保 Logstash 服务在 Python 程序运行前已启动。
  3. 生产环境中建议添加异常处理(如连接失败重试)。
  4. 若需发送大量日志,可考虑批量发送或使用异步方式。

通过以上方式,Python 应用程序可以高效地与 Logstash 集成,实现日志的收集和处理。

相关推荐
掘金一周3 小时前
🍏让前端去做 iPhone 的液态玻璃❓ | 掘金一周 10.2
前端·人工智能·后端
9号达人3 小时前
Java19 新特性详解与实践
java·后端·面试
银剑3 小时前
微服务安全认证演进之路:增强型Bearer Token架构实战
后端
绝无仅有3 小时前
资深面试之MySQL 问题及解答(一)
后端·面试·github
绝无仅有3 小时前
面试MySQL 高级问题及解答(三)
后端·面试·github
z晨晨3 小时前
Java求职面试实战:从Spring到微服务的全面挑战
java·数据库·spring·微服务·面试·技术栈
聪明的笨猪猪4 小时前
Java SE “异常处理 + IO + 序列化”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
JaceJufrog4 小时前
VidGo Bug修复1-修复线程错误
后端
GalenZhang8884 小时前
Springboot调用Ollama本地大模式
java·spring boot·后端