我正在尝试使用烧瓶服务器设置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没有显示任何东西。谢谢你的帮助。
答案 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"
.....
可能有一种更简洁的方式(如果你发现了一种方式可以发布),但这是开始的事情。