入门教程:常用的 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 小时前
两张大图一次性讲清楚k8s调度器工作原理
后端
间彧3 小时前
Stream flatMap详解与应用实战
后端
Dream it possible!4 小时前
LeetCode 面试经典 150_链表_合并两个有序链表(58_21_C++_简单)
leetcode·链表·面试·1024程序员节
间彧4 小时前
Java Stream流两大实战陷阱:并行流Parallel误用、List转Map时重复键异常
后端
tan180°5 小时前
Linux网络UDP(10)
linux·网络·后端·udp·1024程序员节
正经教主6 小时前
【Trae+AI】和Trae学习搭建App_03:后端API开发原理与实践(已了解相关知识的可跳过)
后端·express
shepherd1266 小时前
破局延时任务(上):为什么选择Spring Boot + DelayQueue来自研分布式延时队列组件?
java·spring boot·后端·1024程序员节
开心-开心急了6 小时前
Flask入门教程——李辉 第5章: 数据库 关键知识梳理
笔记·后端·python·flask·1024程序员节
雨夜之寂6 小时前
第一章-第三节-Java开发环境配置
java·后端
郑清6 小时前
Spring AI Alibaba 10分钟快速入门
java·人工智能·后端·ai·1024程序员节·springaialibaba