Arp*_*nki 12 python django logstash elastic-stack
我正在使用ELK堆栈从我的Django服务器进行集中式日志记录.我的ELK堆栈位于远程服务器上,logstash.conf如下所示:
input {
tcp {
port => 5959
codec => json
}
}
output {
elasticsearch {
hosts => ["xx.xx.xx.xx:9200"]
}
}
Run Code Online (Sandbox Code Playgroud)
两个服务elasticsearch和logstash都正常工作(使用检查docker-compose logs logstash).
我的Django服务器的设置文件的日志配置如下:
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',
},
}
}
Run Code Online (Sandbox Code Playgroud)
我运行我的Django服务器,Logstash处理程序处理日志,因为控制台显示没有日志.我使用python-logstashDjango服务器中的库来构造上面的conf,但日志不会发送到我的远程服务器.
我查看了很多问题,验证了服务正在运行且端口是否正确,但我不知道为什么日志没有被发送到Logstash.
查看配置,记录器“django.request”设置为级别“DEBUG”,处理程序“logstash”设置为级别“INFO”。我的猜测是处理程序不会处理DEBUG消息。但我不确定。
为记录器和处理程序设置相同的级别以测试其是否有效。
使用什么级别取决于您想要从日志中获得什么。在这种情况下,我想 INFO 级别就足够了。
如果还没有看一下Django 日志记录
注意:从评论来看,它似乎没有解决问题,但我希望它无论如何都是有用的。
更新:
我尝试了以下配置,它在“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,
},
}}
Run Code Online (Sandbox Code Playgroud)
通过此测试配置,logstash 处理程序至少应该接收消息/日志记录。如果运气不好,我建议尝试调试logstash.TCPLogstashHandler和 SocketHandler(由TCPLogstashHandler继承)以确保它们收到发出的记录。