将 Django 应用的日志输出到 ELK 中

在微服务场景中,将每个服务的日志集中到 Elasticsearch,再通过 Kibana 进行查询、分析、展示是一个必备的功能。本文简单演示如何将 Django Rest Framework 应用产生的日志输出到 ELK 技术栈中。

为完成本演示,需要首先搭建 ELK 技术栈。 如果没有现成的, 可以参考 使用 Docker-Compose 搭建单机版的 ELK 技术栈 , 使用 Docker-Compose 简单的搭建一个单机版的开发环境。

安装依赖库

在本例中,我们使用 python-logstash 这个第三方依赖库,在项目虚拟环境中执行:

1
pip install python-logstash

修改 Django 项目的设置

打开 Django 或 Django-rest-framework 项目中的 settings.py 文件,增加以下的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import logstash

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
'logstash': {
'level': 'DEBUG',
'class': 'logstash.TCPLogstashHandler',
'host': 'localhost',
'port': 5000, # Default value: 5959
'version': 1, # 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': False, # Fully qualified domain name. Default value: false.
'tags': ['django.request'], # list of tags. Default: None.
}
},
'root': {
'handlers': ['console', 'logstash'],
'level': 'DEBUG',
},
}

程序中按照 python 中 logging 模块方式进行日志输出,如果不熟悉 logging 模块,可以参考 Python中的日志功能(logging)

设置 logstash

如果你使用了上文中推荐的, 用 docker-compose 搭建的单机版 ELK 技术栈,接下来就需要配置 logstash。

首先,执行以下命令,登录到 logstash 容器中:

1
docker exec -it docker-elk-master_logstash_1 /bin/bash

docker-elk-master_logstash_1 是容器名。

登录进去以后是处在 /usr/share/logstash 目录中,直接进入 config 子目录, 执行:

1
cd config

在 congfig 目录中,启动 vi 新建一个名为: logstash.conf 的文件

1
vi logstash.conf

按 i 进入编辑模式, 然后拷贝以下内容到文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
input {
beats {
port => 5044
}

tcp {
port => 5000
}
}

## Add your filters / logstash plugins configuration here

output {
elasticsearch {
hosts => "elasticsearch:9200"
user => "elastic"
password => "5Vq6Crdn0hWmnOr9Aed5"
ecs_compatibility => disabled
}
}

密码需要用你实际的密码进行替换

然后保存文件并退出 vi。 在输入 exit 命令退出容器。

现在重启该容器,执行:

1
docker restart docker-elk-master_logstash_1

以上步骤完成后,就可以登入 Kibana ,查看应用输出的日志了。

本文标题:将 Django 应用的日志输出到 ELK 中

文章作者:晨星

发布时间:2020年11月23日 - 08:11

最后更新:2020年11月25日 - 22:11

原始链接:https://www.mls-tech.info/python/python-django-logging-to-elk/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。