我在从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
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")
我不知道为什么这不起作用。可能和节拍有关吗?
它确实与beats有关,请使用这个docker:github.com/deviantony/docker-elk,一切都像一个符咒
这里真正的答案是python logstash不使用beats协议。它使用TCP或UDP。
您可以在代码中看到这一点
logstash.TCPLogstashHandler(host, 5959, version=1)
您需要将ELK Docker映像设置为具有TCP或UDP侦听器,然后在python logstash中选择匹配的处理程序来发送消息。
下面是一个beats配置文件的示例,您可以将其包含在Docker映像中,以便在TCP端口上侦听:
如果您命名了该文件
03-tcp-input.conf
,那么Dockerfile可能如下所示:研究source repo中的Docker文件,了解Sébastien如何设置Logstash的配置。
相关问题 更多 >
编程相关推荐