elasticsearch,logstash,kibana,Ruby On Rails,Docker,elasticsearch,Logstash,Kibana" /> elasticsearch,logstash,kibana,Ruby On Rails,Docker,elasticsearch,Logstash,Kibana" />

Ruby on rails 使用Ruby on Rails Docker映像将日志发送到ELK中的Logstash

Ruby on rails 使用Ruby on Rails Docker映像将日志发送到ELK中的Logstash,ruby-on-rails,docker,elasticsearch,logstash,kibana,Ruby On Rails,Docker,elasticsearch,Logstash,Kibana,我一直在关注这些教程、回购协议、文档以及所有内容: 你说得对。我还有几个,由于简短,我省略了 不幸的是,要么是它们过时了,没有显示整个画面,要么是我的配置不好(我认为是后者) 我真的不知道我是否遗漏了什么 我目前使用的是docker compose版本3。我目前正在使用(sebp/elk)。我可以启动所有东西,并访问Kibana,但我无法将日志发送到Logstash,以便对其进行处理并发送到ElasticSearch 我尝试过这些方法,但都无济于事: 内部应用程序.rb 1)

我一直在关注这些教程、回购协议、文档以及所有内容:

你说得对。我还有几个,由于简短,我省略了

不幸的是,要么是它们过时了,没有显示整个画面,要么是我的配置不好(我认为是后者)

我真的不知道我是否遗漏了什么

我目前使用的是
docker compose
版本3。我目前正在使用(sebp/elk)。我可以启动所有东西,并访问Kibana,但我无法将日志发送到Logstash,以便对其进行处理并发送到ElasticSearch

我尝试过这些方法,但都无济于事:

内部应用程序.rb

1) 使用Lograge并将其发送到端口5044(显然是Logstash正在侦听的端口)

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-无法为“本地主机端口5044”分配请求的地址-连接(2)。 有趣的是,这个错误可能会不时消失

另一个问题是,每当我尝试时,我都会收到一个无法访问的
Elasticsearch:[http://localhost:9200...]
这是在容器内部…我不知道它是否无法连接,因为URL暴露在容器外部…或者存在另一个错误。我可以卷曲到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
不要在配置中使用“localhost”。在docker网络中,服务名称是主机名。请改用“elk”,例如:

config.lograge.logger = LogStashLogger.new(type: :udp, host: 'elk',  port: 5044) 
不要在配置中使用“localhost”。在docker网络中,服务名称是主机名。请改用“elk”,例如:

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