mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 23:32:37 +03:00
homework 10.4: complete all tasks
This commit is contained in:
23
src/homework/10-monitoring/10.4/help/configs/filebeat.yml
Normal file
23
src/homework/10-monitoring/10.4/help/configs/filebeat.yml
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
filebeat.inputs:
|
||||
- type: container
|
||||
paths:
|
||||
- '/var/lib/docker/containers/*/*.log'
|
||||
|
||||
processors:
|
||||
- add_docker_metadata:
|
||||
host: "unix:///var/run/docker.sock"
|
||||
|
||||
- decode_json_fields:
|
||||
fields: ["message"]
|
||||
target: "json"
|
||||
overwrite_keys: true
|
||||
|
||||
output.logstash:
|
||||
hosts: ["logstash:5044"]
|
||||
|
||||
#output.console:
|
||||
# enabled: true
|
||||
|
||||
logging.json: true
|
||||
logging.metrics.enabled: false
|
||||
@@ -0,0 +1,2 @@
|
||||
---
|
||||
http.host: "0.0.0.0"
|
||||
@@ -0,0 +1,24 @@
|
||||
input {
|
||||
beats {
|
||||
type => beats
|
||||
port => 5044
|
||||
}
|
||||
}
|
||||
|
||||
filter {
|
||||
# Prevent recursive overflow on same machine
|
||||
if [container][name] =~ "filebeat"
|
||||
or [container][name] =~ "logstash"
|
||||
or [container][name] =~ "elasticsearch"
|
||||
or [container][name] =~ "kibana"
|
||||
or [container][image][name] =~ /^sha256/ {
|
||||
drop { }
|
||||
}
|
||||
}
|
||||
|
||||
output {
|
||||
elasticsearch {
|
||||
hosts => ["es-hot:9200"]
|
||||
index => "logstash-%{+YYYY-MM-dd}"
|
||||
}
|
||||
}
|
||||
112
src/homework/10-monitoring/10.4/help/docker-compose.yml
Normal file
112
src/homework/10-monitoring/10.4/help/docker-compose.yml
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
version: '2.2'
|
||||
services:
|
||||
|
||||
es-hot:
|
||||
image: elasticsearch:7.11.2
|
||||
container_name: es-hot
|
||||
environment:
|
||||
- node.name=es-hot
|
||||
- cluster.name=es-docker-cluster
|
||||
- discovery.seed_hosts=es-warm
|
||||
- cluster.initial_master_nodes=es-hot,es-warm
|
||||
- bootstrap.memory_lock=true
|
||||
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
|
||||
volumes:
|
||||
- data01:/usr/share/elasticsearch/data:Z
|
||||
ulimits:
|
||||
memlock:
|
||||
soft: -1
|
||||
hard: -1
|
||||
nofile:
|
||||
soft: 65536
|
||||
hard: 65536
|
||||
ports:
|
||||
- "9200:9200"
|
||||
networks:
|
||||
- elastic
|
||||
depends_on:
|
||||
- es-warm
|
||||
|
||||
es-warm:
|
||||
image: elasticsearch:7.11.2
|
||||
container_name: es-warm
|
||||
environment:
|
||||
- node.name=es-warm
|
||||
- cluster.name=es-docker-cluster
|
||||
- discovery.seed_hosts=es-hot
|
||||
- cluster.initial_master_nodes=es-hot,es-warm
|
||||
- bootstrap.memory_lock=true
|
||||
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
|
||||
volumes:
|
||||
- data02:/usr/share/elasticsearch/data:Z
|
||||
ulimits:
|
||||
memlock:
|
||||
soft: -1
|
||||
hard: -1
|
||||
nofile:
|
||||
soft: 65536
|
||||
hard: 65536
|
||||
networks:
|
||||
- elastic
|
||||
|
||||
kibana:
|
||||
image: kibana:7.11.2
|
||||
container_name: kibana
|
||||
ports:
|
||||
- "5601:5601"
|
||||
environment:
|
||||
ELASTICSEARCH_URL: http://es-hot:9200
|
||||
ELASTICSEARCH_HOSTS: '["http://es-hot:9200","http://es-warm:9200"]'
|
||||
networks:
|
||||
- elastic
|
||||
depends_on:
|
||||
- es-hot
|
||||
- es-warm
|
||||
|
||||
logstash:
|
||||
image: logstash:6.4.3
|
||||
container_name: logstash
|
||||
expose:
|
||||
- 5044
|
||||
volumes:
|
||||
- ./configs/logstash.yml:/opt/logstash/config/logstash.yml:Z
|
||||
- ./configs/pipeline/:/usr/share/logstash/pipeline/
|
||||
networks:
|
||||
- elastic
|
||||
depends_on:
|
||||
- es-hot
|
||||
- es-warm
|
||||
|
||||
filebeat:
|
||||
image: elastic/filebeat:7.11.2
|
||||
container_name: filebeat
|
||||
privileged: true
|
||||
user: root
|
||||
volumes:
|
||||
- ./configs/filebeat.yml:/usr/share/filebeat/filebeat.yml
|
||||
- /var/lib/docker:/var/lib/docker:Z
|
||||
- /var/run/docker.sock:/var/run/docker.sock:Z
|
||||
depends_on:
|
||||
- logstash
|
||||
networks:
|
||||
- elastic
|
||||
|
||||
some_application:
|
||||
image: library/python:3.9-alpine
|
||||
container_name: some_app
|
||||
volumes:
|
||||
- ./pinger/run.py:/opt/run.py:Z
|
||||
entrypoint: python3 /opt/run.py
|
||||
|
||||
volumes:
|
||||
data01:
|
||||
driver: local
|
||||
data02:
|
||||
driver: local
|
||||
data03:
|
||||
driver: local
|
||||
|
||||
networks:
|
||||
elastic:
|
||||
driver: bridge
|
||||
20
src/homework/10-monitoring/10.4/help/pinger/run.py
Normal file
20
src/homework/10-monitoring/10.4/help/pinger/run.py
Normal file
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import logging
|
||||
import random
|
||||
import time
|
||||
|
||||
while True:
|
||||
|
||||
number = random.randrange(0, 4)
|
||||
|
||||
if number == 0:
|
||||
logging.info('Hello there!!')
|
||||
elif number == 1:
|
||||
logging.warning('Hmmm....something strange')
|
||||
elif number == 2:
|
||||
logging.error('OH NO!!!!!!')
|
||||
elif number == 3:
|
||||
logging.exception(Exception('this is exception'))
|
||||
|
||||
time.sleep(1)
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 121 KiB |
BIN
src/homework/10-monitoring/10.4/img/kibana_startup.png
Normal file
BIN
src/homework/10-monitoring/10.4/img/kibana_startup.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 108 KiB |
83
src/homework/10-monitoring/10.4/readme.md
Normal file
83
src/homework/10-monitoring/10.4/readme.md
Normal file
@@ -0,0 +1,83 @@
|
||||
Выполнение [домашнего задания](https://github.com/netology-code/mnt-homeworks/blob/MNT-13/10-monitoring-04-elk/README.md)
|
||||
по теме "10.4. ELK"
|
||||
|
||||
## Q/A
|
||||
|
||||
### Задание 1
|
||||
|
||||
> Вам необходимо поднять в докере:
|
||||
> - elasticsearch(hot и warm ноды)
|
||||
> - logstash
|
||||
> - kibana
|
||||
> - filebeat
|
||||
>
|
||||
> и связать их между собой.
|
||||
>
|
||||
> Logstash следует сконфигурировать для приёма по tcp json сообщений.
|
||||
>
|
||||
> Filebeat следует сконфигурировать для отправки логов docker вашей системы в logstash.
|
||||
>
|
||||
> В директории [help](./help) находится манифест docker-compose и конфигурации filebeat/logstash для быстрого
|
||||
> выполнения данного задания.
|
||||
>
|
||||
> Результатом выполнения данного задания должны быть:
|
||||
> - скриншот `docker ps` через 5 минут после старта всех контейнеров (их должно быть 5)
|
||||
> - скриншот интерфейса kibana
|
||||
> - docker-compose манифест
|
||||
> - ваши yml конфигурации для стека
|
||||
|
||||
Использовал готовый стэк из оригинального репозитория: [help](./help), но с некоторыми доработками:
|
||||
|
||||
- конфигурацию pipelines унёс в отдельную директорию и убрал из фильтра:
|
||||
- логи elk-стека, чтобы не было проблем с переполнением памяти
|
||||
- условия по json, так как pinger-приложение генерирует простую строку
|
||||
|
||||
```shell
|
||||
docker-compose ps
|
||||
```
|
||||
|
||||
```text
|
||||
Name Command State Ports
|
||||
----------------------------------------------------------------------------------------------------------------
|
||||
es-hot /bin/tini -- /usr/local/bi ... Up 0.0.0.0:9200->9200/tcp,:::9200->9200/tcp, 9300/tcp
|
||||
es-warm /bin/tini -- /usr/local/bi ... Up 9200/tcp, 9300/tcp
|
||||
filebeat /usr/bin/tini -- /usr/loca ... Up
|
||||
kibana /bin/tini -- /usr/local/bi ... Up 0.0.0.0:5601->5601/tcp,:::5601->5601/tcp
|
||||
logstash /usr/local/bin/docker-entr ... Up 5044/tcp, 0.0.0.0:5046->5046/tcp,:::5046->5046/tcp, 9600/tcp
|
||||
some_app python3 /opt/run.py Up
|
||||
```
|
||||
|
||||

|
||||
|
||||
### Задание 2
|
||||
|
||||
> Перейдите в меню создания index-patterns в kibana (http://localhost:5601/app/management/kibana/indexPatterns/create)
|
||||
> и создайте несколько index-patterns из имеющихся.
|
||||
>
|
||||
> Перейдите в меню просмотра логов в kibana (Discover) и самостоятельно изучите как отображаются логи и как производить
|
||||
> поиск по логам.
|
||||
>
|
||||
> В манифесте директории help также приведено dummy приложение, которое генерирует рандомные события в stdout контейнера.
|
||||
> Данные логи должны порождать индекс logstash-* в elasticsearch. Если данного индекса нет - воспользуйтесь советами
|
||||
> и источниками из раздела "Дополнительные ссылки" данного ДЗ.
|
||||
|
||||
Discover по созданному index pattern:
|
||||
|
||||

|
||||
|
||||
### Дополнительные ссылки
|
||||
|
||||
При выполнении задания пользуйтесь вспомогательными ресурсами:
|
||||
|
||||
- [поднимаем elk в докер](https://www.elastic.co/guide/en/elastic-stack-get-started/current/get-started-docker.html)
|
||||
- [поднимаем elk в докер с filebeat и докер логами](https://www.sarulabs.com/post/5/2019-08-12/sending-docker-logs-to-elasticsearch-and-kibana-with-filebeat.html)
|
||||
- [конфигурируем logstash](https://www.elastic.co/guide/en/logstash/current/configuration.html)
|
||||
- [плагины filter для logstash](https://www.elastic.co/guide/en/logstash/current/filter-plugins.html)
|
||||
- [конфигурируем filebeat](https://www.elastic.co/guide/en/beats/libbeat/5.3/config-file-format.html)
|
||||
- [привязываем индексы из elastic в kibana](https://www.elastic.co/guide/en/kibana/current/index-patterns.html)
|
||||
- [как просматривать логи в kibana](https://www.elastic.co/guide/en/kibana/current/discover.html)
|
||||
- [решение ошибки increase vm.max_map_count elasticsearch](https://stackoverflow.com/questions/42889241/how-to-increase-vm-max-map-count)
|
||||
|
||||
В процессе выполнения задания могут возникнуть также не указанные тут проблемы в зависимости от системы.
|
||||
|
||||
Используйте output stdout filebeat/kibana и api elasticsearch для изучения корня проблемы и ее устранения.
|
||||
Reference in New Issue
Block a user