如何配置logstash容器以使用http输入并使用elasticsearch容器 - docker compose

Rai*_*ina 9 logstash docker docker-compose elk

我想设置三个容器,一个用于logstash,一个用于elasticsearch,一个用于kibana。最后两个都很好,但我需要配置第一个,以便它具有并使用 http 输入插件,然后使用我将传递它的 CSV。

到目前为止,我已经尝试过了,它可以运行,但我认为它没有使用我告诉它的配置

    version: '3.3'
services:
  logstash:
    image: docker.elastic.co/logstash/logstash:6.7.0
#    configs:
#    - source: logstash_config
#      target: /etc/logstash/conf.d/logstash.conf
#    command: bash -c "logstash -f /etc/logstash/conf.d/logstash.conf && bin/logstash-plugin install logstash-input-http"  
    command: bash -c 'bin/logstash -e "input { http { } } output { stdout { codec => rubydebug} }" && bin/logstash-plugin install logstash-input-http'
    links:
      - elasticsearch
    ports:
      - 5044:5044
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.7.0
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - "9200:9200"
  kibana:
    image: docker.elastic.co/kibana/kibana:6.7.0
    ports:
      - "5601:5601"
   
configs:
  logstash_config:
    file: ./configs/logstash.conf
      
volumes:
  esdata1:
    driver: local
Run Code Online (Sandbox Code Playgroud)

到目前为止的配置是(它仍然没有 csv 部分)

    input {
  http {
    port => 8080
    ssl => off
 }
}
output {
  elasticsearch {
    hosts => "127.0.0.1"
    codec => "json"
    index => "logstash-%{+YYYY.MM.dd}"
  }
}
Run Code Online (Sandbox Code Playgroud)

关于如何让logstash使用带有docker compose的http输入插件的任何想法???

提前致谢。

Ser*_*sen 2

容器使用8080端口,因此需要将该端口从主机转发到容器的网络接口在此示例中,32000 被转发到 8080。

  logstash:
# blabla
    ports:
      - "5044:5044"
      - "9600:9600"
      - "32000:8080"

docker-compose -f .\docker-compose.yml up -d

netstat -ant | findstr 32000
  TCP    0.0.0.0:32000 0.0.0.0:0 LISTENING
Run Code Online (Sandbox Code Playgroud)

因此docker启动了一个socketserver监听32000并将其转发到docker的桥接ip端口8080,http输入插件正在监听该端口。

现在发送一个 http 请求到 32000 进入过滤器,如果这是输出插件,过滤器会将其记录到 elasticsearch。

curl -X PUT 'http://ip:32000' -d 'insert log here'

    GET .myindex/_search
    {
      "query": {
        "query_string": {
          "query": "insert",
          "fields": ["message"]
        }
      }
    }

      {
        "_index": ".myindex",
        "_id": "ertqY4IBbsVkN0caS8Ml",
        "_score": 1,
        "_source": {
          "@timestamp": "2022-08-03T11:14:46.570619Z",
          "message": "insert log here",
          "http": {
            "request": {
              "mime_type": "application/x-www-form-urlencoded",
              "body": {
                "bytes": "15"
.........
Run Code Online (Sandbox Code Playgroud)