Gdy wzrasta ilość systemów w sieci, wzrasta jednocześnie ilość miejsc, do których musimy zaglądać, aby przeanalizować incydent, który w każdej chwili może wystąpić. Ktoś kiedyś zauważył ten problem i tak powstały serwery logów, czyli usługi przechowujące logi z innych systemów. Takie usługi często przy wystąpieniu konkretnego logu wykonują zdefiniowaną akcję, ale głównym zadaniem jest łatwa analiza przechowywanych logów, szczególnie gdy różne systemy są często od siebie zależne i problem z działaniem konkretnej usługi może nie być spowodowany usługą, od której zależy jej działanie, ale nawet gdzieś głębiej, gdzie te usługi nie mają ze sobą bezpośredniej styczności. W tym artykule pokażę, jak zainstalować taki serwer, a za serwer logów posłuży Graylog.
Instalację w formie video obejrzysz TUTAJ 🙂
Instalacja Graylog jako kontener
W sieci mam zainstalowany serwer z usługami kontenerowymi Docker i aplikacją do zarządzania kontenerami Portainer.io. Poniższą instrukcję należy wykonać po zalogowaniu się do Portainer.io.
- Przejdź do konfiguracji Stacks i naciśnij przycisk Add stack.
- Wpisz nazwę stacku, np. graylog i w polu z definicją pliku docker-compose wklej poniższą zawartość:
version: '3' services: # MongoDB: https://hub.docker.com/_/mongo/ mongo: image: mongo:4.2 volumes: - mongo_data:/data/db networks: - graylog # Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2 volumes: - es_data:/usr/share/elasticsearch/data environment: - http.host=0.0.0.0 - transport.host=localhost - network.host=0.0.0.0 - "ES_JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=true -Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 deploy: resources: limits: memory: 1g networks: - graylog # Graylog: https://hub.docker.com/r/graylog/graylog/ graylog: image: graylog/graylog:4.3.5 volumes: - graylog_data:/usr/share/graylog/data environment: # CHANGE ME (must be at least 16 characters)! - GRAYLOG_PASSWORD_SECRET=somepasswordpepper # Password: admin - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 - GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/ entrypoint: /usr/bin/tini -- wait-for-it elasticsearch:9200 -- /docker-entrypoint.sh networks: - graylog restart: always depends_on: - mongo - elasticsearch ports: # Graylog web interface and REST API - 9000:9000 # Syslog TCP - 1514:1514 # Syslog UDP - 1514:1514/udp # GELF TCP - 12201:12201 # GELF UDP - 12201:12201/udp networks: graylog: driver: bridge volumes: mongo_data: driver: local es_data: driver: local graylog_data: driver: local
Powyższy kod ma już skonfigurowany tryb stały i aktualnie najwyższą stabilną wersję Graylog dostępną w Docker Hubie.
- Otwórz terminal linuxa i wykonaj polecenie
pwgen -N 1 -s 96
. Wyświetlony ciąg znaków skopiuj i wklej w miejsce pogrubionej wyżej wartości somepasswordpepper. - W terminalu wykonaj polecenie
echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
. Wpisz hasło jakie chcesz ustawić na roota i naciśnij Enter. Podczas wprowadzania hasło jest widoczne jawnie. Skopiuj wyliczoną sumę sha256 i wklej ją zamiast pogrubionej sumy 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918. - Pogrubioną wartość 127.0.0.1 zamień adresem IP serwera, na którym zainstalowany jest Docker.
- Przewiń stronę na sam dół i naciśnij przycisk Deploy the stack.
Po kilku minutach całe środowisko będzie gotowe. Najdłużej trwa uruchamianie kontenera z usługą Graylog i niestety pozostaje cierpliwie czekać.
Uzyskiwanie dostępu do interfejsu Graylog
- W przeglądarce internetowej wejdź na stronę http://adres_ip_dockera:9000.
- Gdy usługa będzie uruchomiona zobaczysz ekran logowania.
Nazwa użytkownika: admin
Hasło: zostało zdefiniowane w punkcie 4 powyższej instrukcji (domyślnie: admin) - Po zalogowaniu usługa będzie przygotowywana.
- Jeśli wyświetli się instrukcja szybkiego startu to oznacza, że wszystko poszło dobrze. Polecam ją sobie przejrzeć.