如何使用 Flask 服务器设置 ELK?

how to setup ELK with flask server?

我正在尝试使用烧瓶服务器设置 ELK。我正在使用 docker 到 运行 我的 ELK 堆栈。 Logstash 运行ning 在端口 9601 上。这是我在命令“./logstash -f logstash.conf”中使用的设置文件:

logstash.conf

input {
  tcp {
        host => "127.0.0.1"
        port => 5000
  }
}

output {
  elasticsearch { hosts => ["localhost"]}
  stdout {codec => rubydebug}
}

elasticSearch 运行ning 在端口 9200 上,我的烧瓶服务器在端口 5000 上。当我启动 logstash 时,当我在烧瓶服务器中打印日志时没有任何反应(我创建了一个 webService 的目的这样做)。而且我不知道如何检查它是否有效,但 Kibana 没有显示任何内容。感谢您的帮助。

我确实明白我的问题是什么。事实上,我试图读取 dokcer 容器外的日志。为了解决我的问题,我只是将 logstash 作为一个独立的应用程序(没有 dokcer)启动,然后在我的烧瓶应用程序中,我在端口 5001 上使用一个套接字,如下所示:

from flask import Flask
from flask import jsonify
from flask import request
from flask_cors import CORS, cross_origin
import socket

TCP_IP = '127.0.0.1'
TCP_PORT = 5001
BUFFER_SIZE = 20


app = Flask(__name__)
CORS(app)

@app.route('/')
def hello():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((TCP_IP, TCP_PORT))
    s.send(request.method + " " + request.url + " " + "200")
    s.close()
    return jsonify(ok='ok')

最后,我在 logstash 配置文件中监听这个端口,如下所示:

input {
  tcp {
   port => 5001
  } 
}

output {
  elasticsearch { hosts => ["localhost"]}
  stdout {codec => rubydebug}
}

而且有效!

如果你想在 docker 中 运行 弹性,你可以使用 docker-compose。您的 docker-compose.yml 可能看起来像这样:

version: "3"
services:
  flask:
    build: .  # Use location of your dockerfile for flask
    container_name: flask
  .....

  logstash:
    image: docker.elastic.co/logstash/logstash:6.2.4
    links:
      - elasticsearch
    volumes:
      - /c/config:/config # Put your logstash.config in c:/config (assuming windows)
    depends_on:
      - elasticsearch
    working_dir: /config
    entrypoint: logstash -f logstash.config

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.2.4
    container_name: elasticsearch
    .....

  kibana:
    .....

和你的logstash.config:

# Not sure about input

output {
  elasticsearch {
  hosts => "elasticsearch"
  .....

可能有更简洁的方法(如果您找到了 post),但这是开始的方法。