从python登录到Logstash

use*_*184 6 python logstash docker

我在从python登录到logstash时遇到了一些麻烦。

我正在使用来自sebp / elk(http://elk-docker.readthedocs.io)和python-logstash(https://pypi.python.org/pypi/python-logstash)的Docker映像作为日志记录处理程序

Docker映像为Beats界面(http://elk-docker.readthedocs.io/#usage)公开了端口5044 。每当我尝试登录到该端口时,都不会发生任何事情...是否应该使用其他端口?

我已经通过以下方式验证了logstash的工作原理:

/opt/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch   { hosts => ["localhost"] } }' --path.data /root/data
Run Code Online (Sandbox Code Playgroud)

Python代码(来自python-logstash的官方示例):

import logging
from logging import StreamHandler
import logstash
import sys

host = 'localhost'

test_logger = logging.getLogger('python-logstash-logger')
test_logger.setLevel(logging.INFO)
test_logger.addHandler(logstash.TCPLogstashHandler(host, 5044, version=1))
test_logger.addHandler(StreamHandler())

try:
    test_logger.error('python-logstash: test logstash error message.')
    test_logger.info('python-logstash: test logstash info message.')
    test_logger.warning('python-logstash: test logstash warning message.')

    # add extra field to logstash message
    extra = {
        'test_string': 'python version: ' + repr(sys.version_info),
        'test_boolean': True,
        'test_dict': {'a': 1, 'b': 'c'},
        'test_float': 1.23,
        'test_integer': 123,
        'test_list': [1, 2, '3'],
    }
    test_logger.info('python-logstash: test extra fields', extra=extra)
except:
    print("Error")
Run Code Online (Sandbox Code Playgroud)

我不知道为什么这不起作用。它可能与Beats有关吗?

Dev*_*vin 5

真正的答案是python-logstash不使用beats协议。它使用TCP或UDP。

您可以在代码中看到 logstash.TCPLogstashHandler(host, 5959, version=1)

您需要将ELK Docker映像设置为具有TCP或UDP侦听器,然后在python-logstash中选择匹配的处理程序以发送消息。

这是一个示例beats配置文件,您可以将其包含在Docker映像中以侦听TCP端口:

input {
    tcp {
    port => 5959
    codec => json
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您命名该文件,03-tcp-input.conf则您的Dockerfile可能如下所示:

FROM sebp/elk

ENV LOGSTASH_PATH_CONF /etc/logstash

ADD ./03-tcp-input.conf ${LOGSTASH_PATH_CONF}/conf.d/03-tcp-input.conf
Run Code Online (Sandbox Code Playgroud)

存储库中研究Docker文件,以了解Sébastien如何设置Logstash的配置。


use*_*184 2

它确实与beats有关,请改用这个docker:github.com/deviantony/docker-elk,一切都像魅力一样工作