Не могу понять сообщение об ошибке при сбое Logstash - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь интегрировать Dockerize между Elasticsearch и SQL Server через Logstash.Я создал свой собственный файл Docker, чтобы иметь возможность использовать его в любой среде, и он выглядит следующим образом:

FROM logstash:6.5.0

#switch to root user
USER root

#arguments
ARG dbHost=foo
ARG dbName=foo
ARG dbUser=foo
ARG dbUserPassword=foo
ARG elasticHost=www.google.com
ARG dbTable=foo
ARG elasticIndex=foo
ARG shardNum=foo
ARG replicasNum=foo

#host where database is located
ENV dbHost ${dbHost}
#database name
ENV dbName ${dbName}
#database user
ENV dbUser ${dbUser}
#database user password
ENV dbUserPassword ${dbUserPassword}
#host where Elasticsearch is located
ENV elasticHost $elasticHost
#table to log
ENV dbTable ${dbTable}
#index name
ENV elasticIndex ${elasticIndex}
#number of shards
ENV shardNum ${shardNum}
#number of replicas
ENV replicasNum ${replicasNum}
RUN usermod -a -G root logstash
#copying jar for sql server into /bin/jdbc directorys
COPY ./sqljdbc42.jar /bin/jdbc/
#adding system variable CLASSPATH for sqljdbc
CMD ["echo 'export CLASSPATH="/bin/jdbc/sqljdbc42.jar"' >> /root/.bashrc"]

#creating Elasticsearch index for SQL Server logs
RUN echo $(curl -XPUT --silent '${elasticHost}/${elasticIndex}' -d '{"settings" : {"index" : {"number_of_shards" : ${shardNum}, "number_of_replicas" : ${replicasNum}}}}')

#setting working directory
WORKDIR /bin/jdbc

#configuring LogStash configuration file
RUN echo "input {" >> sql.conf
RUN echo "  jdbc {" >> sql.conf
RUN echo "    jdbc_connection_string => "jdbc:sqlserver://${dbHost};databaseName=${dbName};db_username=${dbUser};db_password=${dbUserPassword}"" >> sql.conf
RUN echo "    jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"" >> sql.conf
RUN echo "    jdbc_user => ${dbUser}" >> sql.conf
RUN echo "" >> sql.conf
RUN echo "    statement => "select * from $dbTable"" >> sql.conf
RUN echo "  }" >> sql.conf
RUN echo "}" >> sql.conf
RUN echo "" >> sql.conf
RUN echo "output {" >> sql.conf
RUN echo "  elasticsearch {" >> sql.conf
RUN echo "    hosts => ["${elasticHost}"]" >> sql.conf
RUN echo "    index => "${elasticIndex}"" >> sql.conf
RUN echo "  }" >> sql.conf
RUN echo "}" >> sql.conf

RUN chown --recursive logstash /usr/share/logstash/bin/logstash

USER logstash
ENTRYPOINT ["/usr/share/logstash/bin/logstash", "-f", "/bin/jdbc/sql.conf", "-l", "logstash.log"]

И я создал и поместил изображение в свой личный репозиторий Docker.Я пытаюсь запустить этот образ с помощью docker compose вместе с SQL Server, Elasticsearch и Kibana.Цель состоит в том, чтобы отобразить результат « select * from » в Kibana.Мой файл docker-compose выглядит следующим образом:

version: '3.4'

services:
  elasticsearch:
    image: "elasticsearch:6.5.0"
    environment:
      - "discovery.type=single-node"
    ports:
      - "9200:9200"
      - "9300:9300"
    container_name: elasticsearch
    networks:
      - random-network

  sql_server:
    image: "mcr.microsoft.com/mssql/server:2017-latest"
    environment:
      - "ACCEPT_EULA=Y"
      - "SA_PASSWORD=RandomPassword"
    ports:
      - "1400:1433"
    container_name: apprrr-dev
    networks:
      - random-network

  kibana:
    image: "elastic/kibana:6.5.0"
    ports:
      - "5601:5601"
    container_name: kibana
    environment:
      - "ELASTICSEARCH_URL=http://elasticsearch:9200"
    networks:
      - random-network
    depends_on:
      - elasticsearch

  elasticsqlserver:
    image: "localhost:5000/ryukote2/elasticsqlserver:1.0.0"
    environment:
      - "dbHost=sql_server:1400"
      - "dbName=RandomDB"
      - "dbUser=sa"
      - "dbUserPassword=RandomPassword"
      - "elasticHost=http://elasticsearch:9200"
      - "dbTable=RandomTable"
      - "elasticIndex=TestIndex"
      - "shardNum=1"
      - "replicasNum=1"
    networks:
      - random-network
    depends_on:
      - sql_server
      - elasticsearch

networks:
  random-network
    driver: bridge

Все службы запускаются нормально, и служба " elasticsqlserver " завершается с ошибкой:

elasticsqlserver_1 |ОШИБКА: неизвестная команда '/ bin / sh' elasticsqlserver_1 |elasticsqlserver_1 |Смотрите: 'bin / logstash --help' elasticsqlserver_1 |[ОШИБКА] 2019-03-05 12: 58: 13.988 [main] Logstash - java.lang.IllegalStateException: Logstash остановил обработку из-за ошибки: (SystemExit) выход random-network_elasticsqlserver_1, завершившийся с кодом 1

Я нигде не могу найти причину этой ошибки и как решить эту проблему.Мой dockerfile нигде в тексте не содержит « / bin / sh ».

Я не удивлюсь, если это что-то тривиальное.

...