如何使用烧瓶服务器设置ELK?

时间:2017-02-08 13:41:46

标签: flask elastic-stack

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

logstash.conf

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

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

elasticSearch正在端口9200上运行,而我的烧瓶服务器在端口5000上运行。当我启动logstash时,当我在烧瓶服务器中打印日志时没有任何反应(为此我创建了一个webService)。我不知道怎么能检查它是否有效,但是Kibana没有显示任何东西。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

我确实理解我的问题是什么。事实上,我试图读取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}
}

它有效!

答案 1 :(得分:0)

如果你想在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"
  .....

可能有一种更简洁的方式(如果你发现了一种方式可以发布),但这是开始的事情。