PUT Elasticsearch Ingest Pipeline по умолчанию - PullRequest
0 голосов
/ 04 марта 2019

В настоящее время мы используем Elasticsearch для хранения журналов Spring Boot App, отправляемых Filebeat, и используем Kibana для визуализации этого.

Вся наша архитектура докернизирована внутри файла docker-compose.В настоящее время, когда мы запускаем стек, нам нужно дождаться запуска Elasticsearch, затем PUT нашего Ingest Pipeline, затем перезапустить Filebeat, и только только тогда , если наши журналы будут отображаться правильно в Kibana.

Я довольно новичок в этом, но мне было интересно, нет ли способа, чтобы Elasticsearch сохранял конвейеры загрузки, чтобы вам не приходилось загружать их каждый раз?Я читал о монтировании томов или запуске пользовательских сценариев для ожидания ES и PUT, когда все будет готово, но все это кажется очень громоздким для варианта использования, который мне кажется по умолчанию?

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Мы использовали аналогичный подход к ozlevka, запустив скрипт во время процесса сборки нашего пользовательского образа Elasticsearch.

Это наш скрипт:

#!/bin/bash
# This script sets up the Elasticsearch docker instance with the correct pipelines and templates

baseUrl='localhost:9200'
contentType='Content-Type:application/json'

# filebeat
ingestUrl=$baseUrl'/_ingest/pipeline/our-pipeline?pretty'
payload='/usr/share/elasticsearch/config/our-pipeline.json'

/usr/share/elasticsearch/bin/elasticsearch -p /tmp/pid > /dev/null & 
# wait until Elasticsearch is up
# you can get logs if you change /dev/null to /dev/stderr
while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' -XPUT $ingestUrl -H$contentType -d@$payload)" != "200" ]]; do
    echo "Waiting for Elasticsearch to start and posting pipeline..."
    sleep 5
done

kill -SIGTERM $(cat /tmp/pid) 
rm /tmp/pid
echo -e "\n\n\nCompleted Elasticsearch Setup, refer to logs for details"
0 голосов
/ 21 марта 2019

Я предлагаю использовать стартовый скрипт в контейнере filebeat.

Скрипт будет готов к работе с pingasticsearch, после этого создаст конвейер и запустит filebeat.

#!/usr/bin/env bash -e

START_FILE=/tmp/.es_start_file
http () {
    local path="${1}"
    curl -XGET -s -k --fail http://${ELASTICSEARCH_HOST}:{$ELASTICSEARCH_PORT}${path}
}

pipeline() {
    curl -XPUT -s -k --fail http://${ELASTICSEARCH_HOST}:{$ELASTICSEARCH_PORT}/_ingest/pipeline/$PIPELINE_NAME -d @pipeline.json
}

while true; do
    if [ -f "${START_FILE}" ]; then
        pipeline
        /usr/bin/filebeat -c filebeat.yaml &
        exit 0    
    else
        echo 'Waiting for elasticsearch cluster to become green'
        if http "/_cluster/health?wait_for_status=green&timeout=1s" ; then
            touch ${START_FILE}
        fi    
    fi
done

Этот метод подойдет для docker-compose и docker swarm.Для k8s желательно создать датчик готовности.

...