【发布时间】:2018-09-09 00:17:17
【问题描述】:
我一直在关注这些教程、存储库、文档和所有内容:
- https://medium.com/@AnjLab/how-to-set-up-elk-for-rails-log-management-using-docker-and-docker-compose-a6edc290669f
- https://github.com/OrthoDex/Docker-ELK-Rails
- http://ericlondon.com/2017/01/26/integrate-rails-logs-with-elasticsearch-logstash-kibana-in-docker-compose.html
- https://manas.tech/blog/2015/12/15/logging-for-rails-apps-in-docker.html
- https://logz.io/blog/docker-logging/
- https://www.youtube.com/watch?v=KR2FZiqu57I
- https://dzone.com/articles/docker-logging-with-the-elk-stack-part-i
- Docker container cannot send log to docker ELK stack
嗯,你明白了。我还有几个因为简洁而省略了
不幸的是,要么它们已经过时,不显示全貌,要么我的配置不好(我认为是后者)。
老实说,我不知道我是否遗漏了什么。
我目前使用的是docker-compose 版本 3。我目前使用的是this image (sebp/elk)。我能够启动所有内容并访问 Kibana,但我无法将日志发送到 Logstash,因此它会被处理并发送到 ElasticSearch。
我尝试了这些方法都无济于事:
在 application.rb 中
1) 使用 Lograge 并将其发送到端口 5044(这显然是 Logstash 正在监听的端口)
config.lograge.enabled = true
config.lograge.logger = LogStashLogger.new(type: :udp, host: 'localhost', port: 5044)
2) 将其设置为STDOUT,并让Docker将其作为gelf处理并发送到Logstash:
logger = ActiveSupport::Logger.new(STDOUT)
logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger)
并将其映射回撰写文件:
rails_app:
logging:
driver: gelf
options:
gelf-address: "tcp://localhost:5044"
3) 我试过了
我遇到的其他错误:
每当我尝试使用 config.lograge.logger = LogStashLogger.new(type: :udp, host: 'localhost', port: 5044) 时,我都会得到:
- Errno::EADDRNOTAVAIL - 无法分配请求的地址 - connect(2) for "localhost port 5044.
有趣的是,这个错误可能会不时消失。
其他问题是,每当我尝试create a dummy log entry 时,我都会收到Elasticsearch Unreachable: [http://localhost:9200...] 这是在容器内...我不知道它是否无法连接,因为 URL 暴露在外面...或者还有另一个错误。我可以 curl 到 localhost:9200 并收到肯定的响应。
我正在检查 sebp/ELK 映像,发现它正在使用 Filebeat。这可能是我无法发送日志的原因吗?
如果能提供任何帮助,我将不胜感激!
以防万一,这是我的 docker-compose.yml 文件:
version: '3'
services:
db:
image: mariadb:10.3.5
restart: always
environment:
MYSQL_ROOT_PASSWORD: "rootPassword"
MYSQL_USER: "ruby"
MYSQL_PASSWORD: "userPassword"
MYSQL_DATABASE: "dev"
ports:
- "3306:3306"
volumes:
- db-data:/var/lib/mysql/data
- ./db/rails_cprint.sql:/docker-entrypoint-initdb.d/rails_cprint.sql
elk:
image: sebp/elk:623
ports:
- 5601:5601
- 9200:9200
- 5044:5044
- 2020:2020
volumes:
- elasticsearch:/var/lib/elasticsearch
app:
build: .
depends_on:
- db
- elk
environment:
RAILS_ENV: development
LOGSTASH_HOST: localhost
SECRET_MYSQL_HOST: 'db'
SECRET_MYSQL_DATABASE: 'dev'
SECRET_MYSQL_USERNAME: 'ruby'
SECRET_MYSQL_PASSWORD: 'userPassword'
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3001 -b '0.0.0.0'"
stdin_open: true
tty: true
logging:
driver: gelf
options:
gelf-address: "tcp://localhost:5044"
links:
- db
volumes:
- "./:/var/www/cprint"
ports:
- "3001:3001"
expose:
- "3001"
volumes:
db-data:
driver: local
elasticsearch:
driver: local
【问题讨论】:
标签: ruby-on-rails docker elasticsearch logstash kibana