Вступление.
Стек лося популярен, но я не нашел никаких подходящих статей о подключении Rsyslog к кафке и лося. Вы можете найти где-то о Кафке где-то о логике или Rsyslog, но не совсем всего.
В этой статье мы сделаем Docker-Compose файл, который запустит всю систему и создает изображение, которое имитирует приложение с журналами. Мы также рассмотрим, как вы можете проверить каждую систему отдельно.
Я не хочу создавать подробное описание каждого приложения. Это просто отправная точка для вас, чтобы узнать rsyslog и olk
Github с полным проектом: https://github.com/artemme/rsyslog_kafka_elk.
Я разделил проект на выпуск (тег). Каждый выпуск — это новая услуга, такая как Rsyslog (Tag 0.1) или Kibana (Tag 0,4). Вы можете переключиться на Desire Release и начать проект для тестирования сборки
Ниже в статье я даю описание каждой услуги. Вы можете скачать проект и перейти в корню проекта и ввести команду:
докер
Rsyslog Kafka logstash Elasticsearch и Kibana будет работать. Так что вы можете пойти в Кибану на localhost: 5601
и проверьте запуск. Кроме того, каждый раздел содержит советы о том, как проверить сервис%)
Rsyslog. (тег 0.1)
Нам понадобится две файлы конфигурации: один с основными настройками /etc/rsyslog.conf.
, второй /etc/rsyslog.d/kafka-sender.conf
Необязательно с настройками для наших потребностей
Мы не будем углубиться в настройки rsyslog, потому что вы сможете копать их в течение длительного времени. Просто помните основные инструкции: модуль, шаблон, действие Давайте посмотрим на пример файла /etc/rsyslog.d/kafka-sender.conf
:
# load module which use for sending message to kafka module(load="omkafka") # Declare template for log with name "json_lines" : template(name="json_lines" type="list" option.json="on") { constant(value="{") constant(value="\"timestamp\":\"") property(name="timereported" dateFormat="rfc3339") constant(value="\",\"message\":\"") property(name="msg") constant(value="\",\"host\":\"") property(name="hostname") constant(value="\",\"severity\":\"") property(name="syslogseverity-text") constant(value="\",\"facility\":\"") property(name="syslogfacility-text") constant(value="\",\"syslog-tag\":\"") property(name="syslogtag") constant(value="\"}") } # Decalare action to send message to kafka broker in test_topic_1. Note how we use template json_lines and module omkafka action( broker=["host.docker.internal:9092"] type="omkafka" template="json_lines" topic="test_topic_1" action.resumeRetryCount="-1" action.reportsuspension="on" )
Помните название темы: test_topic_1
Вы можете найти полный список имен недвижимости для шаблонов там: https://www.rsyslog.com/doc/master/configuration/properties.html.
Также обратите внимание на основной файл /etc/rsyslog.conf
содержит строку, как: $ IncludeConfig/etc/rsyslog.d/*. Конфета
Это директива, которая говорит нам, где еще прочитать настройки для RSYSLOG. Полезно отделить общие настройки от конкретных
Создайте изображение для генерации журналов
Изображение, по сути, просто запустит Rsyslog. В будущем мы сможем ввести этот контейнер и генерировать журналы.
Вы можете найти документ Docker в /Rsyslog
папка. Давайте посмотрим на кусок этого файла, где на первой и второй строки мы копируем наш конфиг. На третьей строке мы устанавливаем папку для журналов, которые будут сгенерированы
COPY rsyslog.conf /etc/ COPY rsyslog.d/*.conf /etc/rsyslog.d/ VOLUME ["/var/log"]
Строительство. Перейти к /Rsyslog
папка и выполнение
docker build . -t rsyslog_kafka
Запустите контейнер, чтобы проверить изображение.
docker run rsyslog_kafka
Чтобы проверить, что RSYSLOG пишут журналы, перейдите в наш контейнер и позвоните в команду:
docker run --rm --network=rsyslog_kafka_elk_elk rsyslog_kafka bash -c `logger -p daemon.debug "This is a test."`
Давайте посмотрим на папку /logs
и вы должны найти строку, как это Это тест.
.
Поздравляю! Вы настроили RSYSLOG в вашем контейнере Docker!
Немного о сети в докереных контейнерах.
Давайте создадим нашу сеть в файле docker-compose.yml. В будущем каждая услуга может быть запущена на разные машины. Это не проблема.
networks: elk: driver: bridge
Кафка (тег 0,2)
Я взял этот репозиторий в качестве основы: https://github.com/wurstmeister/kafka-Docker
Полученный сервис:
zookeeper: image: wurstmeister/zookeeper:latest ports: - "2181:2181" container_name: zookeeper networks: - elk kafka: image: wurstmeister/kafka:0.11.0.1 ports: - "9092:9092" environment: # The below only works for a macOS environment if you installed Docker for # Mac. If your Docker engine is using another platform/OS, please refer to # the relevant documentation with regards to finding the Host IP address # for your platform. KAFKA_ADVERTISED_HOST_NAME: docker.for.mac.localhost KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_CREATE_TOPICS: "logstash_logs:1:1" links: - zookeeper depends_on: - zookeeper container_name: kafka networks: - elk
Советы Как проверить кафка (вы можете сделать это после запуска контейнеров):
Мы сможем увидеть, что в теме кафки, когда мы запускаем наши контейнеры. Во-первых, нужно скачать кафка. Вот прохладный учебник https://kafka.apache.org/quickstart
Но если это коротко скачать здесь здесь https://www.apache.org/dyn/closer.cgi?phath=/kafka/2.7.0/kafka_2.13-2.7.0.tgz
и распаковать его к /приложение
папка. На самом деле, нам нужны скрипты в /bin
папка.
Теперь мы можем подключиться к контейнеру и выполнить скрипт, чтобы увидеть, есть ли какие-либо записи внутри темы test_topic_1
:
docker run --rm --network=rsyslog_kafka_elk_elk -v /app/kafka_2.13-2.7.0:/kafka wurstmeister/kafka:0.11.0.1 bash -c "/kafka/bin/kafka-console-consumer.sh --topic test_topic_1 --from-beginning --bootstrap-server 172.23.0.4:9092"
О самой команде: мы подключаемся к сети RSYSLOG_KAFKA_ELK_ELK, RSYSLOG_KAFKA_ELK — это имя папки, в которой находится файл docker-compose.yml, и elk — это сеть, которую мы указали. С помощью команды -v мы смонтим сценарии для кафки в наш контейнер.
Результат команды должен быть что-то вроде этого:
{"timestamp":"2021-02-27T17:43:38.828970+00:00","message":" action 'action-1-omkafka' resumed (module 'omkafka') [v8.1901.0 try https://www.rsyslog.com/e/2359 ]","host":"c0dcee95ffd0","severity":"info","facility":"syslog","syslog-tag":"rsyslogd:"}
Логиста (тег 0,3)
Конфиги расположены в /logstash
папка. logstash.yml
— Здесь мы указываем параметры для подключения к Elasticsearch
На конфиге есть настройка для кафки, что и для входящего потока и настройки для ElaSticsearch AS для исходящего потока
input { beats { port => 5044 } tcp { port => 5000 } kafka { bootstrap_servers => "kafka:9092" topics => "test_topic_1" } } ## Add your filters / logstash plugins configuration here output { elasticsearch { hosts => "elasticsearch:9200" user => "elastic" password => "changeme" ecs_compatibility => disabled } file { path => "/var/logstash/logs/test.log" codec => line { format => "custom format: %{message}"} } }
Для мониторинга того, что попадает в elasticsearch, и проверьте правильную работу logstash, я создал файл вывод потока, поэтому журналы будут записаны на test.log
файл. Главное — не забудьте добавить громкость в Docker-Compose.yml
volumes: - type: bind source: ./logstash/config/logstash.yml target: /usr/share/logstash/config/logstash.yml read_only: true - type: bind source: ./logstash/pipeline target: /usr/share/logstash/pipeline read_only: true - ./logs:/var/logstash/logs
Когда вы начнете проверку услуг test.log
Файл в вашем проекте. Вы должны найти журналы из Кафка
Elasticsearch (тег 0,3)
Это самая простая конфигурация. Мы запустим пробную версию, но вы можете включить с открытым исходным кодом, если хотите. Конфиги как обычно в /elasticsearch/config/config/
## Default Elasticsearch configuration from Elasticsearch base image. ## https://github.com/elastic/elasticsearch/blob/master/distribution/docker/src/docker/config/elasticsearch.yml # cluster.name: "docker-cluster" network.host: 0.0.0.0 ## X-Pack settings ## see https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-xpack.html # xpack.license.self_generated.type: trial xpack.security.enabled: true xpack.monitoring.collection.enabled: true
Советы Как проверить Elasticsearch (вы можете сделать это после запуска контейнеров):
Давайте проверим индексы упругих. Взять в качестве основы классное изображение Praqma/Network-multitool
и команда завиток:
docker run --rm --network=rsyslog_kafka_elk_elk praqma/network-multitool bash -c "curl elasticsearch:9200/_cat/indices?s=store.size:desc -u elastic:changeme"
В результате команды:
The directory /usr/share/nginx/html is not mounted. Over-writing the default index.html file with some useful information. % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0green open .monitoring-es-7-2021.02.28 QP1RL9ezRwmCFLe38dnlTg 1 0 1337 442 1.4mb 1.4mb green open .monitoring-es-7-2021.03.07 z0f-K-g7RhqDEbqnupfzPA 1 0 576 428 1.2mb 1.2mb green open .monitoring-logstash-7-2021.03.07 rKMYIZE9Q6mSR6_8SG5kUw 1 0 382 0 340.4kb 340.4kb green open .watches nthHo2KlRhe0HC-8MuT6rA 1 0 6 36 257.1kb 257.1kb green open .monitoring-logstash-7-2021.02.28 x98c3c14ToSqmBSOX8gmSg 1 0 363 0 230.1kb 230.1kb green open .monitoring-alerts-7 nbdSRkOSSGuLTGYv0z2L1Q 1 0 3 5 62.4kb 62.4kb yellow open logstash-2021.03.07-000001 22YB7SzYR2a-BAgDEBY0bg 1 1 18 0 10.6kb 10.6kb green open .triggered_watches sp7csXheQIiH7TGmY-EiIw 1 0 0 12 6.9kb 6.9kb 100 784 100 784 0 0 14254 0 --:--:-- --:--:-- --:--:-- 14254
Мы видим, что индексы создаются, и наша эластичная жива. Давайте подключем Кибану сейчас
Кибана (тег 0,4)
Это то, как выглядит сервис
kibana: build: context: kibana/ args: ELK_VERSION: $ELK_VERSION volumes: - type: bind source: ./kibana/config/kibana.yml target: /usr/share/kibana/config/kibana.yml read_only: true ports: - "5601:5601" networks: - elk depends_on: - elasticsearch
В /Кибана
Папка У нас есть Docker-файл для создания изображения, а также настроек Kibana:
server.name: kibana server.host: 0.0.0.0 elasticsearch.hosts: [ "http://elasticsearch:9200" ] monitoring.ui.container.elasticsearch.enabled: true ## X-Pack security credentials # elasticsearch.username: elastic elasticsearch.password: changeme
Чтобы войти в kibana ui, вам нужно войти в браузер localhost: 5601
(Логин/пароль упругий/ChangeMe) В левом меню найдите обнаружение, нажмите на него и создайте индекс. Я предлагаю это logstash- *
Оригинал: «https://dev.to/lbatters/rsyslog-kafka-and-elk-3kgk»