2017-07-15 8 views
10

私は、私のdjangoサーバから集中ログにELKスタックを使用しています。マイELKスタックは、リモートサーバー上にあり、logstash.confが働いているelasticsearchとlogstashこのDjangoサーバはログをログに送信しません

input { 
    tcp { 
    port => 5959 
    codec => json 
    } 
} 
output { 
    elasticsearch { 
    hosts => ["xx.xx.xx.xx:9200"] 
    } 
} 

両方のサービスのように見える(docker-compose logs logstashを使用してチェック)。私は、コンソールがまったくlogs.Iは、上記構築するためのDjangoサーバでのpython-logstashライブラリを使用していない示して私のジャンゴ・サーバとlogstashハンドラは、ログを処理実行

LOGGING = { 
    'version': 1, 
    'handlers': { 
     'logstash': { 
      'level': 'INFO', 
      'class': 'logstash.TCPLogstashHandler', 
      'host': 'xx.xx.xx.xx', 
      'port': 5959, # Default value: 5959 
      'version': 0, # Version of logstash event schema. Default value: 0 (for backward compatibility of the library) 
      'message_type': 'django', # 'type' field in logstash message. Default value: 'logstash'. 
      'fqdn': True, # Fully qualified domain name. Default value: false. 
      'tags': ['django.request'], # list of tags. Default: None. 
     }, 
    }, 
    'loggers': { 
     'django.request': { 
      'handlers': ['logstash'], 
      'level': 'DEBUG', 
    }, 
} 
} 

以下のように

私のジャンゴサーバーの設定ファイルには、CONFをログに記録していますCONFしかしログは、私は多くの質問で確認

私のリモートサーバーに送信されていない、サービスが実行されているポートが正しいですが、ログが送信されない理由を手掛かりはconfiguratiを見てみると

+0

"django.request"はすべてのイベントをフィルタリングしないのですか? –

+0

Djangoリクエストはすべてのリクエストログを送信すると仮定されています –

+0

'fqdn'を' False'に変更しようとしましたか? –

答えて

2

をlogstashないようにすることが確認logger "django.request"はレベル "DEBUG"に設定され、ハンドラ "logstash"はレベル "INFO"に設定されます。私の推測では、ハンドラは処理されませんDEBUGメッセージです。私は確信していません。

ロガーとハンドラが同じレベルで動作することをテストするように設定します。

どのレベルを使用するかは、ログから必要なものによって異なります。この場合、レベル情報で十分です。

もしすでにDjango logging

NOTEを見てみません:コメントからは、問題を解決していないようだが、私はそれがとにかく便利です願っています。

UPDATE:

私は、次の設定を試してみましたが、それが "DEBUG.LOG" に404と500エラーをキャッチ。

LOGGING = { 
'version': 1, 
'disable_existing_loggers': False, 
'handlers': { 
    'logfile': { 
     'level': 'WARNING', 
     'class': 'logging.FileHandler', 
     'filename': os.path.join(PROJECT_DIR, 'debug.log'), 
    }, 
}, 
'loggers': { 
    'django.request': { 
     'handlers': ['logfile'], 
     'level': 'WARNING', 
     'propagate': True, 
    }, 
}} 

このテスト構成では、logstashハンドラは少なくともメッセージ/ logrecordを受け取る必要があります。運がない場合は、logstash.TCPLogstashHandlerSocketHandler(TCPLogstashHandlerによって継承されます)をデバッグして、放出されたレコードを確実に受け取るようにしてください。

+0

あなたのポイントは正しいようですが、これを解決するために何を提案しますか? –

+0

logstashをレベルデバッグに設定してください – herm

+0

レベルINFOの使用を提案しました。ログメッセージの作成方法によっては、使用する環境に応じてDEBUGのログをオン/オフすることができます。例えば、djangoはmail_adminsのためにそれを使います。 –

関連する問題