入门教程:常用的 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 集成,实现日志的收集和处理。

相关推荐
passerby60616 小时前
完成前端时间处理的另一块版图
前端·github·web components
KYGALYX6 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了6 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
爬山算法7 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
Moment7 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
草梅友仁8 小时前
墨梅博客 1.4.0 发布与开源动态 | 2026 年第 6 周草梅周报
开源·github·ai编程
Cobyte8 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc
程序员侠客行9 小时前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis
Honmaple9 小时前
QMD (Quarto Markdown) 搭建与使用指南
后端
PP东9 小时前
Flowable学习(二)——Flowable概念学习
java·后端·学习·flowable