Pythonからlogstashへのログ記録に問題があります。
Sebp/elk( http://elk-docker.readthedocs.io )とpython-logstash( https://pypi.python.org/pypi)のDockerイメージを使用しています/ python-logstash )ロギングハンドラーとして
Dockerイメージは、Beatsインターフェイスのポート5044を公開します( http://elk-docker.readthedocs.io/#usage )。このポートにログインしようとすると何も起こりません...使用する必要のある他のポートはありますか?
これを行うことにより、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")
これが機能しない理由がわかりません。それはおそらくビートと関係がありますか?
それはビートと関係があります。代わりにこのdockerを使用してください:github.com/deviantony/docker-elkそしてすべてが魅力のように機能しました
ここでの本当の答えは、python-logstashはbeatsプロトコルを使用しないということです。 TCPまたはUDPを使用します。
これはコードで確認できますlogstash.TCPLogstashHandler(Host, 5959, version=1)
ELKDockerイメージにTCPまたはUDPリスナーが含まれるように設定してから、python-logstashで一致するハンドラーを選択してメッセージを送信する必要があります。
これは、Dockerイメージに含めてTCPポートでリッスンすることができるビート構成ファイルの例です:
input {
tcp {
port => 5959
codec => json
}
}
そのファイルに名前を付けた場合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
ソースリポジトリ のDockerファイルを調べて、SébastienがLogstashの構成をセットアップする方法を理解します。