使用python-logstash将Django日志导入Elasticsearch的方法.

因为几乎没有相关的英文文献,所以我尝试着写了这句话。原文也没有提供详细的描述。

本家的 python-logstash

准备 Django

mkdir django-logstash
cd django-logstash/
python -m venv venv
. venv/bin/activate
python -m pip install Django
django-admin startproject mysite
cd mysite
python manage.py runserver
ctrl + c
pip install python-logstash
vim mysite/settings.py
python manage.py runserver

设置.py是一个困扰的问题。从网上找的代码,一直无法正常运行。
使用django.request没有显示结果,只有在django.server中才成功。

消息类型:对于 Django 来说也很重要

需要第一行的 version:1 的版本。

LOGGING = {
  'version': 1,
  'handlers': {
      'logstash': {
          'level': 'DEBUG',
          'class': 'logstash.TCPLogstashHandler',
          'host': 'xx.xx.xx.xx',
          'port': 9600, # 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.
      },
  },
  'loggers': {
      'django.server': {
          'handlers': ['logstash'],
          'level': 'DEBUG',
      },
  },
}

谢谢你 nǐ)

只要在浏览器中可见就可以

准备 Logstash

提前创建配置

mkdir config 
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.url: https://your.elasticsearch.example.com:port
xpack.monitoring.elasticsearch.username: xx
xpack.monitoring.elasticsearch.password: xx
xpack.monitoring.enabled: true
log.level: trace

vim配置文件/logstash-django.conf

input {
  tcp {
    port => 9600
    codec => json
  }
}
output {
    elasticsearch {
      hosts => ["https://your.elasticsearch.com"]
      user => ["xx"]
      password => ["xx"]
      index => "djangotest"
      document_type => "%{type}"
    }
   stdout {
      codec => rubydebug {metadata => true }
  }
}

启动吧。大概需要1分钟,耐心等一下。如果能成功打开端口9600,应该会显示“ok”。如果从Django发送的请求能顺利传送过来,控制台就会运行起来。

version: '3'

services:
  logstash:
    restart: always
    container_name: logstash
    image: docker.elastic.co/logstash/logstash:6.8.6
    ports:
      - 9600:9600
    volumes:
      - ./config:/config
    logging:
      driver: "json-file"
      options:
        max-size: "3M"
        max-file: "1"

    command: logstash -r -f /config/*.conf

Docker 镜像手册
https://www.elastic.co/guide/en/logstash/6.3/docker-config.html

请自行准备 Elasticsearch / Kibana。

这个可能会对你有所帮助:
https://qiita.com/uturned0/items/584686262be1aa8a336c

执行

试试随意访问Django
http://localhost:8000/
http://localhost:8000/未知路径

只要数据输入到es中就可以。以下是在kibana中查看数据的图表。

对未知路径的访问返回了404错误状态码。

image.png

“Django和其他日志”

这里好像有很多种选择。(还没尝试过)

广告
将在 10 秒后关闭
bannerAds