Рубрики
Uncategorized

Rsyslog кафка и лось

Вступление. Стек лося популярен, но я не нашел никаких подходящих статей о Connecti … Теги с кафкой, эластиковым поиском, rsyslog, devops.

Вступление.

Стек лося популярен, но я не нашел никаких подходящих статей о подключении 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»