【问题标题】:Sending Logs to Logstash in ELK using Ruby on Rails Docker Image使用 Ruby on Rails Docker Image 将日志发送到 ELK 中的 Logstash
【发布时间】:2018-09-09 00:17:17
【问题描述】:

我一直在关注这些教程、存储库、文档和所有内容:

嗯,你明白了。我还有几个因为简洁而省略了

不幸的是,要么它们已经过时,不显示全貌,要么我的配置不好(我认为是后者)。

老实说,我不知道我是否遗漏了什么。

我目前使用的是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


    【解决方案1】:

    不要在你的配置中使用“localhost”。在 docker 网络中,服务名就是主机名。改用“elk”,例如:

    config.lograge.logger = LogStashLogger.new(type: :udp, host: 'elk',  port: 5044) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-13
      • 2015-02-15
      • 1970-01-01
      • 2013-04-09
      • 2017-05-13
      • 1970-01-01
      • 2021-09-10
      • 2015-05-05
      相关资源
      最近更新 更多