web-dev-qa-db-ja.com

pythonからlogstashへのロギング

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")

これが機能しない理由がわかりません。それはおそらくビートと関係がありますか?

6
user3594184

それはビートと関係があります。代わりにこのdockerを使用してください:github.com/deviantony/docker-elkそしてすべてが魅力のように機能しました

2
user3594184

ここでの本当の答えは、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の構成をセットアップする方法を理解します。

6
Devin