ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π•Π›Πš. НастройванС Π½Π° logstash

въвСдСниС

ΠŸΡ€ΠΈ внСдряванСто Π½Π° Π΄Ρ€ΡƒΠ³Π° систСма сС ΡΠ±Π»ΡŠΡΠΊΠ°Ρ…ΠΌΠ΅ с нСобходимостта Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°ΠΌΠ΅ голям Π±Ρ€ΠΎΠΉ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. Π—Π° инструмСнт бСшС ΠΈΠ·Π±Ρ€Π°Π½ ELK. Π’Π°Π·ΠΈ статия Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈ Π·Π° нашия ΠΎΠΏΠΈΡ‚ Π² настройванСто Π½Π° Ρ‚ΠΎΠ·ΠΈ стСк.

НС си поставямС Π·Π° Ρ†Π΅Π» Π΄Π° опишСм всичкитС ΠΌΡƒ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, Π° искамС Π΄Π° сС ΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€Π°ΠΌΠ΅ Π²ΡŠΡ€Ρ…Ρƒ Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° практичСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. Π’ΠΎΠ²Π° сС дълТи Π½Π° Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΏΡ€ΠΈ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ голямо количСство докумСнтация ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΈ изобраТСния ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΠΎΠΏΠΊΠΈ, ΠΏΠΎΠ½Π΅ Π½ΠΈΠ΅ Π³ΠΈ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ…ΠΌΠ΅.

НиС Π²Π½Π΅Π΄Ρ€ΠΈΡ…ΠΌΠ΅ стСка Ρ‡Ρ€Π΅Π· docker-compose. НСщо ΠΏΠΎΠ²Π΅Ρ‡Π΅, ΠΈΠΌΠ°Ρ…ΠΌΠ΅ Π΄ΠΎΠ±Ρ€Π΅ написан docker-compose.yml, ΠΊΠΎΠΉΡ‚ΠΎ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° Π²Π΄ΠΈΠ³Π½Π΅ΠΌ стСка ΠΏΠΎΡ‡Ρ‚ΠΈ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. И Π½ΠΈ сС ΡΡ‚Ρ€ΡƒΠ²Π°ΡˆΠ΅, Ρ‡Π΅ ΠΏΠΎΠ±Π΅Π΄Π°Ρ‚Π° Π²Π΅Ρ‡Π΅ Π΅ Π±Π»ΠΈΠ·ΠΎ, сСга Ρ‰Π΅ я Π·Π°Π²ΡŠΡ€Ρ‚ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ, Π·Π° Π΄Π° отговаря Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ Π½ΡƒΠΆΠ΄ΠΈ ΠΈ Ρ‚ΠΎΠ²Π° Π΅ всичко.

Π—Π° съТалСниС, ΠΎΠΏΠΈΡ‚ΡŠΡ‚ Π΄Π° сС настрои систСмата Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ‚ Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ бСшС ΡƒΡΠΏΠ΅ΡˆΠ΅Π½ Π²Π΅Π΄Π½Π°Π³Π°. Π—Π°Ρ‚ΠΎΠ²Π° Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅, Ρ‡Π΅ си струва Π΄Π° ΠΏΡ€ΠΎΡƒΡ‡ΠΈΠΌ всСки ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΠΎΠΎΡ‚Π΄Π΅Π»Π½ΠΎ ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° сС Π²ΡŠΡ€Π½Π΅ΠΌ към Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ Π²Ρ€ΡŠΠ·ΠΊΠΈ.

Π’Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ΠΊΠ° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с logstash.

Околна срСда, внСдряванС, стартиранС Π½Π° Logstash Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€

Π—Π° внСдряванС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ docker-compose, СкспСримСнтитС, описани Ρ‚ΡƒΠΊ, са ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈ Π½Π° MacOS ΠΈ Ubuntu 18.0.4.

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° logstash, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠΌΠ°Ρ…ΠΌΠ΅ Π² нашия ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π΅Π½ docker-compose.yml, Π΅ docker.elastic.co/logstash/logstash:6.3.2

Π©Π΅ Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° СкспСримСнти.

Π—Π° Π΄Π° стартирамС logstash, написахмС ΠΎΡ‚Π΄Π΅Π»Π΅Π½ docker-compose.yml. Π Π°Π·Π±ΠΈΡ€Π° сС, бСшС възмоТно Π΄Π° стартирамС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΎΡ‚ командния Ρ€Π΅Π΄, Π½ΠΎ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° Π·Π°Π΄Π°Ρ‡Π°, ΠΏΡ€ΠΈ която всичко ΠΎΡ‚ docker-compose сС стартира Π·Π° нас.

Накратко Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅

ΠšΠ°ΠΊΡ‚ΠΎ слСдва ΠΎΡ‚ описаниСто, logstash ΠΌΠΎΠΆΠ΅ Π΄Π° сС изпълнява ΠΊΠ°Ρ‚ΠΎ Π·Π° Π΅Π΄ΠΈΠ½ ΠΊΠ°Π½Π°Π», Π² Ρ‚ΠΎΠ·ΠΈ случай трябва Π΄Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈ Ρ„Π°ΠΉΠ»Π° *.conf ΠΈΠ»ΠΈ Π·Π° няколко ΠΊΠ°Π½Π°Π»Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ случай трябва Π΄Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈ Ρ„Π°ΠΉΠ»Π° pipelines.yml, ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΡ‚ своя страна , Ρ‰Π΅ ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π° към Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ .conf Π·Π° всСки ΠΊΠ°Π½Π°Π».
Π’Ρ€ΡŠΠ³Π½Π°Ρ…ΠΌΠ΅ ΠΏΠΎ втория ΠΏΡŠΡ‚. ИзглСТдашС Π½ΠΈ ΠΏΠΎ-гъвкав ΠΈ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌ. Π—Π°Ρ‚ΠΎΠ²Π° ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ pipelines.yml ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ дирСктория pipelines, Π² която Ρ‰Π΅ поставим .conf Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° всСки ΠΊΠ°Π½Π°Π».

Π’ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠΌΠ° Π΄Ρ€ΡƒΠ³ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΉΠ» - logstash.yml. НиС Π½Π΅ Π³ΠΎ ΠΏΠΈΠΏΠ°ΠΌΠ΅, Π½ΠΈΠ΅ Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΊΠ°ΠΊΡ‚ΠΎ Π΅.

Π’Π°ΠΊΠ° Ρ‡Π΅ Π½Π°ΡˆΠ°Ρ‚Π° структура Π½Π° дирСктория Π΅:

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π•Π›Πš. НастройванС Π½Π° logstash

Π—Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌΠ΅, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ tcp Π½Π° ΠΏΠΎΡ€Ρ‚ 5046 Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ stdout Π·Π° ΠΈΠ·Ρ…ΠΎΠ΄.

Π•Ρ‚ΠΎ Ρ‚Π°ΠΊΠ°Π²Π° проста конфигурация Π·Π° ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ изпълнСниС. Π—Π°Ρ‰ΠΎΡ‚ΠΎ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½Π°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° Π΅ Π΄Π° сС стартира.

Π’Π°ΠΊΠ° Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Ρ‚ΠΎΠ·ΠΈ docker-compose.yml

version: '3'

networks:
  elk:

volumes:
  elasticsearch:
    driver: local

services:

  logstash:
    container_name: logstash_one_channel
    image: docker.elastic.co/logstash/logstash:6.3.2
    networks:
      	- elk
    ports:
      	- 5046:5046
    volumes:
      	- ./config/pipelines.yml:/usr/share/logstash/config/pipelines.yml:ro
	- ./config/pipelines:/usr/share/logstash/config/pipelines:ro

Какво Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Ρ‚ΡƒΠΊ?

  1. ΠœΡ€Π΅ΠΆΠΈΡ‚Π΅ ΠΈ Ρ‚ΠΎΠΌΠΎΠ²Π΅Ρ‚Π΅ са Π²Π·Π΅Ρ‚ΠΈ ΠΎΡ‚ оригиналния docker-compose.yml (Ρ‚ΠΎΠ·ΠΈ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ сС стартира цСлият стСк) ΠΈ мисля, Ρ‡Π΅ Π½Π΅ влияят ΠΌΠ½ΠΎΠ³ΠΎ Π½Π° ΠΎΠ±Ρ‰Π°Ρ‚Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° Ρ‚ΡƒΠΊ.
  2. БъздавамС Π΅Π΄Π½Π° услуга (услуги) logstash ΠΎΡ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ docker.elastic.co/logstash/logstash:6.3.2 ΠΈ ѝ Π΄Π°Π²Π°ΠΌΠ΅ ΠΈΠΌΠ΅Ρ‚ΠΎ logstash_one_channel.
  3. ΠŸΡ€Π΅Π½Π°ΡΠΎΡ‡Π²Π°ΠΌΠ΅ ΠΏΠΎΡ€Ρ‚ 5046 Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° към ΡΡŠΡ‰ΠΈΡ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ΅Π½ ΠΏΠΎΡ€Ρ‚.
  4. Π‘ΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠΌΠ΅ нашия ./config/pipelines.yml ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΉΠ» Π·Π° Ρ‚Ρ€ΡŠΠ±Π° към Ρ„Π°ΠΉΠ»Π° /usr/share/logstash/config/pipelines.yml Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ logstash Ρ‰Π΅ Π³ΠΎ Π²Π·Π΅ΠΌΠ΅ ΠΈ Ρ‰Π΅ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈ само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅, Π·Π° всСки случай.
  5. Π‘ΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠΌΠ΅ дирСкторията ./config/pipelines, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠ°Π½Π°Π»ΠΈ, към дирСкторията /usr/share/logstash/config/pipelines ΠΈ я ΠΏΡ€Π°Π²ΠΈΠΌ само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π•Π›Πš. НастройванС Π½Π° logstash

piping.yml Ρ„Π°ΠΉΠ»

- pipeline.id: HABR
  pipeline.workers: 1
  pipeline.batch.size: 1
  path.config: "./config/pipelines/habr_pipeline.conf"

Π’ΠΎΠΉ описва Π΅Π΄ΠΈΠ½ ΠΊΠ°Π½Π°Π» с HABR ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈ ΠΏΡŠΡ‚Ρ Π΄ΠΎ нСговия ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΉΠ».

И накрая Ρ„Π°ΠΉΠ»ΡŠΡ‚ "./config/pipelines/habr_pipeline.conf"

input {
  tcp {
    port => "5046"
   }
  }
filter {
  mutate {
    add_field => [ "habra_field", "Hello Habr" ]
    }
  }
output {
  stdout {
      
    }
  }

ЗасСга няма Π΄Π° Π½Π°Π²Π»ΠΈΠ·Π°ΠΌΠ΅ Π² описаниСто ΠΌΡƒ, ΠΎΠΏΠΈΡ‚Π²Π°ΠΌΠ΅ сС Π΄Π° стартирамС:

docker-compose up

Какво виТдамС?

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π°Π». МоТСм Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΌΡƒ:

echo '13123123123123123123123213123213' | nc localhost 5046

И Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π° Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°:

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π•Π›Πš. НастройванС Π½Π° logstash

Но Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΈ:

logstash_one_channel | [2019-04-29T11:28:59,790][Π“Π Π•Π¨ΠšΠ][logstash.licensechecker.licensereader] НС ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ информация Π·Π° Π»ΠΈΡ†Π΅Π½Π·Π° ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° Π»ΠΈΡ†Π΅Π½Π·ΠΈ {:message=>"Elasticsearch Unreachable: [http://elasticsearch:9200/][Manticore ::ResolutionFailure]elasticsearch", ...

logstash_one_channel | [2019-04-29T11:28:59,894][INFO ][logstash.pipeline ] ΠšΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΡŠΡ‚ стартира ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ {:pipeline_id=>".monitoring-logstash", :thread=>"# Β»}

logstash_one_channel | [2019-04-29T11:28:59,988][INFO ][logstash.agent ] Π’Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈ, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ {:count=>2, :running_pipelines=>[:HABR, :".monitoring-logstash"], :non_running_pipelines=>[ ]}
logstash_one_channel | [2019-04-29T11:29:00,015][Π“Π Π•Π¨ΠšΠ][logstash.inputs.metrics] X-Pack Π΅ инсталиран Π½Π° Logstash, Π½ΠΎ Π½Π΅ ΠΈ Π½Π° Elasticsearch. Моля, инсталирайтС X-Pack Π½Π° Elasticsearch, Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ функцията Π·Π° наблюдСниС. МоТС Π΄Π° са Π½Π°Π»ΠΈΡ‡Π½ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
logstash_one_channel | [2019-04-29T11:29:00,526][INFO ][logstash.agent] УспСшно стартирана ΠΊΡ€Π°ΠΉΠ½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° Logstash API {:port=>9600}
logstash_one_channel | [2019-04-29T11:29:04,478][ИНЀОРМАЦИЯ ][logstash.outputs.elasticsearch] Изпълнява сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ, Π·Π° Π΄Π° сС Π²ΠΈΠ΄ΠΈ Π΄Π°Π»ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠ° с Elasticsearch Ρ€Π°Π±ΠΎΡ‚ΠΈ {:healthcheck_url=>http://elasticsearch:9200/, :path=> "/"}
logstash_one_channel | [2019-04-29T11:29:04,487][ΠŸΠ Π•Π”Π£ΠŸΠ Π•Π–Π”Π•ΠΠ˜Π• ][logstash.outputs.elasticsearch] ΠžΠΏΠΈΡ‚Π°Ρ… сС Π΄Π° Π²ΡŠΠ·ΠΊΡ€Π΅ΡΡ Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° към ΠΌΡŠΡ€Ρ‚Π²ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° ES, Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ… Π³Ρ€Π΅ΡˆΠΊΠ°. {:url=>"Сластично Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch Unreachable: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch"}
logstash_one_channel | [2019-04-29T11:29:04,704][ИНЀОРМАЦИЯ ][logstash.licensechecker.licensereader] Изпълнява сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ, Π·Π° Π΄Π° сС Π²ΠΈΠ΄ΠΈ Π΄Π°Π»ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠ° с Elasticsearch Ρ€Π°Π±ΠΎΡ‚ΠΈ {:healthcheck_url=>http://elasticsearch:9200/, :path=> "/"}
logstash_one_channel | [2019-04-29T11:29:04,710][ΠŸΠ Π•Π”Π£ΠŸΠ Π•Π–Π”Π•ΠΠ˜Π• ][logstash.licensechecker.licensereader] ΠžΠΏΠΈΡ‚Π°Ρ… сС Π΄Π° Π²ΡŠΠ·ΠΊΡ€Π΅ΡΡ Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° към ΠΌΡŠΡ€Ρ‚Π²ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° ES, Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ… Π³Ρ€Π΅ΡˆΠΊΠ°. {:url=>"Сластично Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch Unreachable: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch"}

И Π½Π°ΡˆΠΈΡΡ‚ Π΄ΡŠΠ½Π΅Ρ€ пълзи Π½Π°Π³ΠΎΡ€Π΅ ΠΏΡ€Π΅Π· цялото Π²Ρ€Π΅ΠΌΠ΅.

Π’ΡƒΠΊ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Ρ… Π² Π·Π΅Π»Π΅Π½ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ‡Π΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΡŠΡ‚ Π΅ стартирал ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π² Ρ‡Π΅Ρ€Π²Π΅Π½ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΈ Π² ΠΆΡŠΠ»Ρ‚ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° ΠΎΠΏΠΈΡ‚ Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Сластично Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅: 9200.
Π’ΠΎΠ²Π° сС случва ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Π² logstash.conf, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΈΠΌΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° elasticsearch. Π’ края Π½Π° ΠΊΡ€Π°ΠΈΡ‰Π°Ρ‚Π° logstash ΠΏΡ€ΠΈΠ΅ΠΌΠ°, Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ стСка Elk ΠΈ Π½ΠΈΠ΅ Π³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ…ΠΌΠ΅.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅, Π½ΠΎ Π½Π΅ Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

Π Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ Π΄Π° Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ Ρ‚Π°Π·ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‡Ρ€Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° срСдата XPACK_MONITORING_ENABLED.

НСка Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ промяна Π² docker-compose.yml ΠΈ Π³ΠΎ стартирамС ΠΎΡ‚Π½ΠΎΠ²ΠΎ:

version: '3'

networks:
  elk:

volumes:
  elasticsearch:
    driver: local

services:

  logstash:
    container_name: logstash_one_channel
    image: docker.elastic.co/logstash/logstash:6.3.2
    networks:
      - elk
    environment:
      XPACK_MONITORING_ENABLED: "false"
    ports:
      - 5046:5046
   volumes:
      - ./config/pipelines.yml:/usr/share/logstash/config/pipelines.yml:ro
      - ./config/pipelines:/usr/share/logstash/config/pipelines:ro

Π‘Π΅Π³Π° всичко Π΅ Π½Π°Ρ€Π΅Π΄. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ Π΅ Π³ΠΎΡ‚ΠΎΠ² Π·Π° СкспСримСнти.

МоТСм Π΄Π° напишСм ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π² ΡΡŠΡΠ΅Π΄Π½Π°Ρ‚Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°:

echo '13123123123123123123123213123213' | nc localhost 5046

И виТ:

logstash_one_channel | {
logstash_one_channel |         "message" => "13123123123123123123123213123213",
logstash_one_channel |      "@timestamp" => 2019-04-29T11:43:44.582Z,
logstash_one_channel |        "@version" => "1",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |            "host" => "gateway",
logstash_one_channel |            "port" => 49418
logstash_one_channel | }

Π Π°Π±ΠΎΡ‚Π° Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΊΠ°Π½Π°Π»

И Ρ‚Π°ΠΊΠ°, Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅. Π‘Π΅Π³Π° Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅, Π·Π° Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ logstash Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ. НСка засСга Π½Π΅ ΠΏΠΈΠΏΠ°ΠΌΠ΅ Ρ„Π°ΠΉΠ»Π° pipelines.yml, Π½Π΅ΠΊΠ° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ, ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ с Π΅Π΄ΠΈΠ½ ΠΊΠ°Π½Π°Π».

Врябва Π΄Π° ΠΊΠ°ΠΆΠ°, Ρ‡Π΅ общият ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с конфигурационния Ρ„Π°ΠΉΠ» Π½Π° ΠΊΠ°Π½Π°Π»Π° Π΅ Π΄ΠΎΠ±Ρ€Π΅ описан Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎΡ‚ΠΎ Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Ρ‚ΡƒΠΊ Ρ‚ΡƒΠΊ
Ако искатС Π΄Π° Ρ‡Π΅Ρ‚Π΅Ρ‚Π΅ Π½Π° руски, Ρ‚ΠΎΠ³Π°Π²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ Ρ‚ΠΎΠ·ΠΈ статия(Π½ΠΎ ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡΡŠΡ‚ Π½Π° заявката Ρ‚Π°ΠΌ Π΅ стар, трябва Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ Ρ‚ΠΎΠ²Π° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄).

НСка Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ послСдоватСлно ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π»Π° Π·Π° въвСТданС. Π’Π΅Ρ‡Π΅ видяхмС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΏΠΎ tcp. Какво Π΄Ρ€ΡƒΠ³ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС интСрСсно Ρ‚ΡƒΠΊ?

ВСствайтС ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΡΡŠΡ€Π΄Π΅Ρ‡Π΅Π½ Ρ€ΠΈΡ‚ΡŠΠΌ

Има Ρ‚Π°ΠΊΠ°Π²Π° интСрСсна Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΈ тСстови ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ.
Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, трябва Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ плъгина heartbean Π² сСкцията Π·Π° въвСТданС.

input {
  heartbeat {
    message => "HeartBeat!"
   }
  } 

Π’ΠΊΠ»ΡŽΡ‡Π²Π°ΠΌΠ΅ Π³ΠΎ, Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ вСднъТ Π½Π° ΠΌΠΈΠ½ΡƒΡ‚Π°

logstash_one_channel | {
logstash_one_channel |      "@timestamp" => 2019-04-29T13:52:04.567Z,
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |         "message" => "HeartBeat!",
logstash_one_channel |        "@version" => "1",
logstash_one_channel |            "host" => "a0667e5c57ec"
logstash_one_channel | }

ИскамС Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΏΠΎ-чСсто, трябва Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π».
Π’Π°ΠΊΠ° Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π½Π° всСки 10 сСкунди.

input {
  heartbeat {
    message => "HeartBeat!"
    interval => 10
   }
  }

ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Ρ„Π°ΠΉΠ»

Π Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΈ файловия Ρ€Π΅ΠΆΠΈΠΌ. Ако Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎΠ±Ρ€Π΅ с Ρ„Π°ΠΉΠ»Π°, Ρ‚ΠΎΠ³Π°Π²Π° Π΅ възмоТно Π΄Π° Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π°Π³Π΅Π½Ρ‚, Π΄ΠΎΠ±Ρ€Π΅, ΠΏΠΎΠ½Π΅ Π·Π° Π»ΠΎΠΊΠ°Π»Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°.

Π‘ΠΏΠΎΡ€Π΅Π΄ описаниСто Ρ€Π΅ΠΆΠΈΠΌΡŠΡ‚ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° трябва Π΄Π° Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° tail -f, Ρ‚.Π΅. Ρ‡Π΅Ρ‚Π΅ Π½ΠΎΠ²ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΈΠ»ΠΈ, ΠΏΠΎ ΠΈΠ·Π±ΠΎΡ€, Ρ‡Π΅Ρ‚Π΅ цСлия Ρ„Π°ΠΉΠ».

И Ρ‚Π°ΠΊΠ°, ΠΊΠ°ΠΊΠ²ΠΎ искамС Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ:

  1. ИскамС Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Ρ€Π΅Π΄ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ са Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ към Π΅Π΄ΠΈΠ½ Π»ΠΎΠ³ Ρ„Π°ΠΉΠ».
  2. ИскамС Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС записват Π² няколко Π»ΠΎΠ³ Ρ„Π°ΠΉΠ»Π°, ΠΊΠ°Ρ‚ΠΎ ΡΡŠΡ‰Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ ΠΎΡ‚ΠΊΡŠΠ΄Π΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ.
  3. ИскамС Π΄Π° смС сигурни, Ρ‡Π΅ ΠΊΠΎΠ³Π°Ρ‚ΠΎ logstash сС рСстартира, Ρ‚ΠΎΠΉ няма Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ.
  4. ИскамС Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΄Π°Π»ΠΈ Π°ΠΊΠΎ logstash Π΅ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ ΠΈ Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°Ρ‚ Π΄Π° сС записват във Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Ρ‚ΠΎΠ³Π°Π²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π³ΠΎ стартирамС, Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ.

Π—Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ СкспСримСнта, Π½Π΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΡ‰Π΅ Π΅Π΄ΠΈΠ½ Ρ€Π΅Π΄ към docker-compose.yml, отваряйки дирСкторията, Π² която смС поставили Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅.

version: '3'

networks:
  elk:

volumes:
  elasticsearch:
    driver: local

services:

  logstash:
    container_name: logstash_one_channel
    image: docker.elastic.co/logstash/logstash:6.3.2
    networks:
      - elk
    environment:
      XPACK_MONITORING_ENABLED: "false"
    ports:
      - 5046:5046
   volumes:
      - ./config/pipelines.yml:/usr/share/logstash/config/pipelines.yml:ro
      - ./config/pipelines:/usr/share/logstash/config/pipelines:ro
      - ./logs:/usr/share/logstash/input

И ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ сСкцията Π·Π° въвСТданС Π² habr_pipeline.conf

input {
  file {
    path => "/usr/share/logstash/input/*.log"
   }
  }

Π—Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅:

docker-compose up

Π—Π° Π΄Π° създавамС ΠΈ записвамС Π»ΠΎΠ³ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:


echo '1' >> logs/number1.log

{
logstash_one_channel |            "host" => "ac2d4e3ef70f",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |      "@timestamp" => 2019-04-29T14:28:53.876Z,
logstash_one_channel |        "@version" => "1",
logstash_one_channel |         "message" => "1",
logstash_one_channel |            "path" => "/usr/share/logstash/input/number1.log"
logstash_one_channel | }

Π”Π°, Ρ€Π°Π±ΠΎΡ‚ΠΈ!

Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ смС Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅Ρ‚ΠΎ ΠΏΡŠΡ‚. Π’Π°ΠΊΠ° Ρ‡Π΅ Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅ Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°ΠΌΠ΅ записи ΠΏΠΎ Π½Π΅Π³ΠΎ.

НСка ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ:

echo '2' >> logs/number1.log

{
logstash_one_channel |            "host" => "ac2d4e3ef70f",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |      "@timestamp" => 2019-04-29T14:28:59.906Z,
logstash_one_channel |        "@version" => "1",
logstash_one_channel |         "message" => "2",
logstash_one_channel |            "path" => "/usr/share/logstash/input/number1.log"
logstash_one_channel | }

А сСга към Π΄Ρ€ΡƒΠ³ Ρ„Π°ΠΉΠ»:

 echo '1' >> logs/number2.log

{
logstash_one_channel |            "host" => "ac2d4e3ef70f",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |      "@timestamp" => 2019-04-29T14:29:26.061Z,
logstash_one_channel |        "@version" => "1",
logstash_one_channel |         "message" => "1",
logstash_one_channel |            "path" => "/usr/share/logstash/input/number2.log"
logstash_one_channel | }

Π‘Ρ‚Ρ€Π°Ρ…ΠΎΡ‚Π΅Π½! Π€Π°ΠΉΠ»ΡŠΡ‚ Π΅ Π²Π·Π΅Ρ‚, ΠΏΡŠΡ‚ΡΡ‚ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ, всичко Π΅ Π½Π°Ρ€Π΅Π΄.

Π‘ΠΏΡ€Π΅Ρ‚Π΅ logstash ΠΈ рСстартирайтС. НСка ΠΏΠΎΡ‡Π°ΠΊΠ°ΠΌΠ΅. Вишина. Π’Π΅Π·ΠΈ. НиС Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Ρ‚Π΅Π·ΠΈ записи ΠΎΡ‚Π½ΠΎΠ²ΠΎ.

И сСга Π½Π°ΠΉ-смСлият СкспСримСнт.

ΠŸΠΎΡΡ‚Π°Π²ΡΠΌΠ΅ logstash ΠΈ изпълнявамС:

echo '3' >> logs/number2.log
echo '4' >> logs/number1.log

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ logstash ΠΈ Π²ΠΈΠΆΡ‚Π΅:

logstash_one_channel | {
logstash_one_channel |            "host" => "ac2d4e3ef70f",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |         "message" => "3",
logstash_one_channel |        "@version" => "1",
logstash_one_channel |            "path" => "/usr/share/logstash/input/number2.log",
logstash_one_channel |      "@timestamp" => 2019-04-29T14:48:50.589Z
logstash_one_channel | }
logstash_one_channel | {
logstash_one_channel |            "host" => "ac2d4e3ef70f",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |         "message" => "4",
logstash_one_channel |        "@version" => "1",
logstash_one_channel |            "path" => "/usr/share/logstash/input/number1.log",
logstash_one_channel |      "@timestamp" => 2019-04-29T14:48:50.856Z
logstash_one_channel | }

Π£Ρ€Π°! Всичко Π²Π΄ΠΈΠ³Π½Π°.

Но Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΠΌ Π·Π° слСдното. Ако ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ logstash бъдС ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ (docker stop logstash_one_channel && docker rm logstash_one_channel), Π½ΠΈΡ‰ΠΎ няма Π΄Π° бъдС Π²Π·Π΅Ρ‚ΠΎ. ΠŸΠΎΠ·ΠΈΡ†ΠΈΡΡ‚Π° Π½Π° Ρ„Π°ΠΉΠ»Π°, Π΄ΠΎ която Π΅ ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½, сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Ако Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π°, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‰Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ° само Π½ΠΎΠ²ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅.

Π§Π΅Ρ‚Π΅Π½Π΅ Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅

Π”Π° ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Π΅ стартирамС logstash Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚, Π½ΠΎ Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π±ΠΈΡ…ΠΌΠ΅ искали Π΄Π° Π³ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ.
Ако стартирамС logstash със сСкцията Π·Π° въвСТданС, която ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ ΠΏΠΎ-Π³ΠΎΡ€Π΅, няма Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½ΠΈΡ‰ΠΎ. Π‘Π°ΠΌΠΎ Π½ΠΎΠ²ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ ΠΎΡ‚ logstash.

Π—Π° Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ‚Π΅ Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΎΡ‚ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ Ρ€Π΅Π΄ към сСкцията Π·Π° въвСТданС:

input {
  file {
    start_position => "beginning"
    path => "/usr/share/logstash/input/*.log"
   }
  }

ОсвСн Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° нюанс, Ρ‚ΠΎΠ²Π° засяга само Π½ΠΎΠ²ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ logstash всС ΠΎΡ‰Π΅ Π½Π΅ Π΅ видял. Π—Π° ΡΡŠΡ‰ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π΅Ρ‡Π΅ са Π±ΠΈΠ»ΠΈ Π² Π·Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎΡ‚ΠΎ ΠΏΠΎΠ»Π΅ Π½Π° logstash, Ρ‚ΠΎΠΉ Π²Π΅Ρ‡Π΅ Π΅ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠ» Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈΠΌ ΠΈ сСга Ρ‰Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ° само Π½ΠΎΠ²ΠΈ записи Π² тях.

НСка спрСм Π½Π° Ρ‚ΠΎΠ²Π°, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ сСкцията Π·Π° въвСТданС. Има ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΠΏΡ†ΠΈΠΈ, Π½ΠΎ засСга ΠΈΠΌΠ°ΠΌΠ΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π·Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ СкспСримСнти.

ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ ΠΈ трансформиранС Π½Π° Π΄Π°Π½Π½ΠΈ

НСка сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌ слСдния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ Π΅Π΄ΠΈΠ½ ΠΊΠ°Π½Π°Π», някои ΠΎΡ‚ тях са ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ, Π° Π΄Ρ€ΡƒΠ³ΠΈ са ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ°. Π’Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ ΠΏΠΎ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚. Някои са ИНЀО, Π΄Ρ€ΡƒΠ³ΠΈ са Π“Π Π•Π¨ΠšΠ.

Врябва Π΄Π° Π³ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π°. Π’Π΅Π·ΠΈ. ПишСм ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² Π΅Π΄ΠΈΠ½ ΠΊΠ°Π½Π°Π», Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³.

Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ ΠΎΡ‚ сСкцията Π·Π° въвСТданС към Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ ΠΈ ΠΈΠ·Ρ…ΠΎΠ΄.

Използвайки Ρ€Π°Π·Π΄Π΅Π»Π° Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅, Ρ‰Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ входящото ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΉΠΊΠΈ ΠΎΡ‚ Π½Π΅Π³ΠΎ Ρ…Π΅Ρˆ (Π΄Π²ΠΎΠΉΠΊΠΈ ΠΊΠ»ΡŽΡ‡-стойност), с ΠΊΠΎΠΉΡ‚ΠΎ Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ, Ρ‚.Π΅. Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΉΡ‚Π΅ спорСд условията. И Π² Ρ€Π°Π·Π΄Π΅Π»Π° Π·Π° ΠΈΠ·Ρ…ΠΎΠ΄ Ρ‰Π΅ ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΈ Ρ‰Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ всяко ΠΎΡ‚ тях Π΄ΠΎ нСговия собствСн ΠΊΠ°Π½Π°Π».

Π Π°Π·Π±ΠΎΡ€ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ с grok

Π—Π° Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ тСкстови Π½ΠΈΠ·ΠΎΠ²Π΅ ΠΈ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΏΠΎΠ»Π΅Ρ‚Π° ΠΎΡ‚ тях, Π² Ρ€Π°Π·Π΄Π΅Π»Π° Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ ΠΈΠΌΠ° спСциалСн плъгин - grok.

Π‘Π΅Π· Π΄Π° си поставям Π·Π° Ρ†Π΅Π» Π΄Π° Π΄Π°ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описаниС Ρ‚ΡƒΠΊ (Π·Π° Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ°ΠΌ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° докумСнтация), Ρ‰Π΅ Π΄Π°ΠΌ моя прост ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, трябва Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Ρ€Π΅Π΄ΠΎΠ²Π΅. Имам Π³ΠΈ Ρ‚Π°ΠΊΠ°:

1 ИНЀО ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅1
2 Π‘ΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π·Π° Π“Π Π•Π¨ΠšΠ2

Π’Π΅Π·ΠΈ. ΠŸΡŠΡ€Π²ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, слСд Ρ‚ΠΎΠ²Π° INFO/ERROR, слСд Ρ‚ΠΎΠ²Π° някаква Π΄ΡƒΠΌΠ° Π±Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ.
НС Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ, Π½ΠΎ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ, Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°.

И Ρ‚Π°ΠΊΠ°, Π² Ρ€Π°Π·Π΄Π΅Π»Π° Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅, Π² приставката grok, трябва Π΄Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΠΌΠ΅ шаблон Π·Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ Π½ΠΈΠ·ΠΎΠ²Π΅.

Π©Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

filter {
  grok {
    match => { "message" => ["%{INT:message_id} %{LOGLEVEL:message_type} %{WORD:message_text}"] }
   }
  } 

По ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ‚ΠΎΠ²Π° Π΅ рСгулярСн ΠΈΠ·Ρ€Π°Π·. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ сС Π³ΠΎΡ‚ΠΎΠ²ΠΈ шаблони ΠΊΠ°Ρ‚ΠΎ INT, LOGLEVEL, WORD. ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈΠΌ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ дСсСни ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚ΡƒΠΊ. Ρ‚ΡƒΠΊ

Π‘Π΅Π³Π°, ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°ΠΉΠΊΠΈ ΠΏΡ€Π΅Π· Ρ‚ΠΎΠ·ΠΈ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€, Π½Π°ΡˆΠΈΡΡ‚ Π½ΠΈΠ· Ρ‰Π΅ сС ΠΏΡ€Π΅Π²ΡŠΡ€Π½Π΅ Π² Ρ…Π΅Ρˆ ΠΎΡ‚ Ρ‚Ρ€ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π°: message_id, message_type, message_text.

Π’Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ Π² изходния Ρ€Π°Π·Π΄Π΅Π».

ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² ΠΈΠ·Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° сСкция с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° if

Π’ ΠΈΠ·Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° сСкция, ΠΊΠ°ΠΊΡ‚ΠΎ си спомнямС, щяхмС Π΄Π° Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° Π½Π° Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°. Някои - ΠΊΠΎΠΈΡ‚ΠΎ са iNFO, Ρ‰Π΅ ΠΈΠ·Π²Π΅Π΄Π΅ΠΌ Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π°, Π° с Π³Ρ€Π΅ΡˆΠΊΠΈ Ρ‰Π΅ ΠΈΠ·Π²Π΅Π΄Π΅ΠΌ във Ρ„Π°ΠΉΠ».

Как ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° сподСлим Ρ‚Π΅Π·ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ? УсловиСто Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²Π΅Ρ‡Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ - Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ спСциално ΠΏΠΎΠ»Π΅ message_type, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ° само Π΄Π²Π΅ стойности INFO ΠΈ ERROR. ИмСнно Π²ΡŠΡ€Ρ…Ρƒ Π½Π΅Π³ΠΎ Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΈΠ·Π±ΠΎΡ€ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° if.

if [message_type] == "ERROR" {
        # Π—Π΄Π΅ΡΡŒ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π² Ρ„Π°ΠΉΠ»
       } else
     {
      # Π—Π΄Π΅ΡΡŒ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π² stdout
    }

ОписаниС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с ΠΏΠΎΠ»Π΅Ρ‚Π° ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² Ρ‚ΠΎΠ·ΠΈ Ρ€Π°Π·Π΄Π΅Π» ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎ Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ.

Π‘Π΅Π³Π° относно самото Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

КонзолСн ΠΈΠ·Ρ…ΠΎΠ΄, Ρ‚ΡƒΠΊ всичко Π΅ ясно - stdout {}

Но ΠΈΠ·Ρ…ΠΎΠ΄ΡŠΡ‚ към Ρ„Π°ΠΉΠ»Π° - Π½Π΅ забравяйтС, Ρ‡Π΅ изпълнявамС всичко Ρ‚ΠΎΠ²Π° ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Ρ„Π°ΠΉΠ»ΡŠΡ‚, Π² ΠΊΠΎΠΉΡ‚ΠΎ записвамС Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°, Π΄Π° бъдС Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ ΠΎΡ‚Π²ΡŠΠ½, трябва Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΠΌ Ρ‚Π°Π·ΠΈ дирСктория Π² docker-compose.yml.

ΠžΠ±Ρ‰ΠΎ:

Π˜Π·Ρ…ΠΎΠ΄Π½ΠΈΡΡ‚ Ρ€Π°Π·Π΄Π΅Π» Π½Π° нашия Ρ„Π°ΠΉΠ» ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:


output {
  if [message_type] == "ERROR" {
    file {
          path => "/usr/share/logstash/output/test.log"
          codec => line { format => "custom format: %{message}"}
         }
    } else
     {stdout {
             }
     }
  }

Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ ΠΎΡ‰Π΅ Π΅Π΄ΠΈΠ½ Ρ‚ΠΎΠΌ към docker-compose.yml Π·Π° ΠΈΠ·Ρ…ΠΎΠ΄:

version: '3'

networks:
  elk:

volumes:
  elasticsearch:
    driver: local

services:

  logstash:
    container_name: logstash_one_channel
    image: docker.elastic.co/logstash/logstash:6.3.2
    networks:
      - elk
    environment:
      XPACK_MONITORING_ENABLED: "false"
    ports:
      - 5046:5046
   volumes:
      - ./config/pipelines.yml:/usr/share/logstash/config/pipelines.yml:ro
      - ./config/pipelines:/usr/share/logstash/config/pipelines:ro
      - ./logs:/usr/share/logstash/input
      - ./output:/usr/share/logstash/output

Π—Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅, ΠΎΠΏΠΈΡ‚Π²Π°ΠΌΠ΅, Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ раздСлянСто Π½Π° Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€