====== Graylog ====== Traktować jako opis, nie przepis. ==== Instalacja na RHEL9 i podobnych ==== Należy zainstalować trzy rzeczy: * MongoDB, * Datanode, * Graylog. Pamiętaj, że licencja MongoDB nie pozwala na redystrybucję dla klientów, ale na swoje potrzeby można tego używać. Pakiet graylog-server zawiera Javę od Eclipse oraz forka ElasticSearch nazwanego Opensearch. Polecam taką konfigurację sprzętową, lub wirtualną: * 8x CPU * 32 gigabajty ramu, * dysk co najmniej 250 gigabajtów na dane w katalogu /var/lib/graylog-datanode ; lokalizację danych można zmienić, ale mi się nie chciało. Nie polegam tutaj na zewnętrznych repozytoriach, ponieważ serwer z Graylogiem nie ma wyjścia na internet. Można zrobić reposync MongoDB oraz Grayloga, ale niektóre pliki RPM zajmują ponad gigabajt. == Instalacja MongoDB == Lista pakietów RPM: * https://repo.mongodb.org/yum/redhat/9Server/mongodb-org/7.0/x86_64/RPMS/mongodb-database-tools-100.10.0-1.x86_64.rpm * https://repo.mongodb.org/yum/redhat/9Server/mongodb-org/7.0/x86_64/RPMS/mongodb-mongosh-2.3.4.x86_64.rpm * https://repo.mongodb.org/yum/redhat/9Server/mongodb-org/7.0/x86_64/RPMS/mongodb-org-7.0.9-1.el9.x86_64.rpm * https://repo.mongodb.org/yum/redhat/9Server/mongodb-org/7.0/x86_64/RPMS/mongodb-org-database-7.0.9-1.el9.x86_64.rpm * https://repo.mongodb.org/yum/redhat/9Server/mongodb-org/7.0/x86_64/RPMS/mongodb-org-database-tools-extra-7.0.9-1.el9.x86_64.rpm * https://repo.mongodb.org/yum/redhat/9Server/mongodb-org/7.0/x86_64/RPMS/mongodb-org-mongos-7.0.9-1.el9.x86_64.rpm * https://repo.mongodb.org/yum/redhat/9Server/mongodb-org/7.0/x86_64/RPMS/mongodb-org-server-7.0.9-1.el9.x86_64.rpm * https://repo.mongodb.org/yum/redhat/9Server/mongodb-org/7.0/x86_64/RPMS/mongodb-org-tools-7.0.9-1.el9.x86_64.rpm Pobrać do jednego katalogu i zainstalować: # rpm -Uvh *rpm Niektórych z tych narzędzi nie będziemy potrzebować, ale aplikacje Mongo nie zajmują dużo miejsca na dysku i bez dostępu do internetu musiałbym ich szukać. Mongo nie wymaga tutaj żadnej dodatkowej konfiguracji. Nie trzeba też otwierać na firewallu żadnego portu. Źródło: https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-red-hat/ . ---- == Instalacja Datanode == Link do pakietu RPM: https://packages.graylog2.org/repo/el/stable/6.1/x86_64/graylog-datanode-6.1.3-1.x86_64.rpm . Pobrać i zainstalować. Zalecenia są takie, żeby dać procesom więcej pamięci. Napisać plik ///etc/sysctl.d/90-graylog.conf// o treści: vm.max_map_count=262144 i zaczytać: # sysctl -p /etc/sysctl.d/90-graylog.conf # cat /proc/sys/vm/max_map_count 262144 Teraz można wylosować podejrzanie długie hasło: < /dev/urandom tr -dc A-Z-a-z-0-9 | head -c${1:-96};echo; które należy wpisać do pliku ///etc/graylog/datanode/datanode.conf// w linijce password_secret = i uruchomić datanode: # systemctl enable graylog-datanode # systemctl start graylog-datanode Źródło: https://go2docs.graylog.org/current/downloading_and_installing_graylog/red_hat_installation.htm?tocpath=Install%20Graylog%7COperating%20System%20Packages%7C_____2#InstallDataNode . ---- == Instalacja Grayloga == Link do pliku RPM: https://packages.graylog2.org/repo/el/stable/6.1/x86_64/graylog-server-6.1.3-1.x86_64.rpm . Pobrać i zainstalować. W pliku ///etc/graylog/server/server.conf// w linijce password_secret = przepisać hasło z pliku ///etc/graylog/datanode/datanode.conf// . Teraz wygenerować sumę hasła do Grayloga: # echo -n "Enter Password: " && head -1 # cat /etc/graylog/server/server.conf | grep -Ev '^#|^$' is_leader = true node_id_file = /etc/graylog/server/node-id password_secret = ........................ root_password_sha2 = ..................... bin_dir = /usr/share/graylog-server/bin data_dir = /var/lib/graylog-server plugin_dir = /usr/share/graylog-server/plugin http_bind_address = 0.0.0.0:9000 http_enable_cors = true stream_aware_field_types=false trusted_proxies = 127.0.0.1/32 disabled_retention_strategies = none,close allow_leading_wildcard_searches = false allow_highlighting = false field_value_suggestion_mode = on output_batch_size = 500 output_flush_interval = 1 output_fault_count_threshold = 5 output_fault_penalty_seconds = 30 processor_wait_strategy = blocking ring_size = 65536 inputbuffer_ring_size = 65536 inputbuffer_wait_strategy = blocking message_journal_enabled = true message_journal_dir = /var/lib/graylog-server/journal lb_recognition_period_seconds = 3 mongodb_uri = mongodb://localhost/graylog mongodb_max_connections = 1000 integrations_scripts_dir = /usr/share/graylog-server/scripts Można już uruchomić aplikację: # systemctl enable graylog-server # systemctl restart graylog-server W logu ///var/log/graylog-server/server.log// czasem można znaleźć linijki 2024-11-30T15:42:43.704+01:00 WARN [IndexerClusterCheckerThread] Elasticsearch node [192.168.111.45] triggered [ES_NODE_DISK_WATERMARK_HIGH] due to low free disk space i w takim wypadku trzeba przydzielić więcej miejsca do katalogu ///var/lib/graylog-datanode//. Jeżeli Graylog uruchomił się poprawnie, we wspomnianym logu pojawi się zapis: ======================================================================================================== It seems you are starting Graylog for the first time. To set up a fresh install, a setup interface has been started. You must log in to it to perform the initial configuration and continue. Initial configuration is accessible at 0.0.0.0:9000, with username 'admin' and password '.........'. Try clicking on http://admin:.........@0.0.0.0.0:9000 ======================================================================================================== Trzeba na chwilkę otworzyć port 9000/tcp na firewallu, żeby wejść na stronę konfiguratora i w czterech krokach utworzyć certyfikat oraz indeks w Opensearch. To nie będzie certyfikat dla strony administracyjnej Grayloga, więc nie trzeba się nim za bardzo przejmować i utworzyć jeden na 20 lat. Zamiast 0.0.0.0 trzeba napisać adres IP serwera z aplikacją. Po przejściu konfiguratora można zamknąć port 9000. Źródło: https://go2docs.graylog.org/current/downloading_and_installing_graylog/red_hat_installation.htm?tocpath=Install%20Graylog%7COperating%20System%20Packages%7C_____2#InstallGraylog . ---- == Proxy na Nginx == Trzeba mieć zainstalowanego Nginxa i wygenerowany / kupiony jakikolwiek certyfikat SSL. Plik ///etc/nginx/proxy_params// , zawierający dosyć standardowe ustawienia: proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 64M; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; #add_header X-Frame-Options SAMEORIGIN; #add_header X-Content-Type-Options nosniff,sameorigin; #add_header Content-Security-Policy "default-src 'self'"; add_header X-XSS-Protection "1; mode=block"; add_header Referrer-Policy "origin"; proxy_intercept_errors on; #proxy_redirect off; Zwrócić uwagę na komentarze. Uri ///api// nie chce mi się ładować w przeglądarce, kiedy te ustawienia są włączone. Jeszcze nie wiem, dlaczego. Plik vhosta, na przykład ///etc/nginx/conf.d/graylog.conf// : server { listen 80; server_name log1.ping.local; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name log1.ping.local; location / { proxy_pass http://127.0.0.1:9000; include proxy_params; } ssl_certificate_key /etc/ssl/nginx/log1.ping.local.key; ssl_certificate /etc/ssl/nginx/log1.ping.local.crt; } I można używać Grayloga po normalnym https, który nie jest skonfigurowany w samej aplikacji. ---- ==== Logi z journala ==== Graylog nie umie Journald i trzeba mu trochę pomóc. W aplikacji Graylog trzeba dodać nowy "input" typu "Syslog UDP" {{ :wiki:gl_input01.jpg?400 |}} nasłuchujący na 0.0.0.0 na jakimś wysokim porcie typu 10010 {{ :wiki:gl_input02.jpg?400 |}} W celu ochrony przed spamem, należy otworzyć na firewallu port 10010/udp, ale tylko dla obserwowanej maszyny. Inne maszyny będą miały nowe "inputy" na innych portach. Na obserwowanej maszynie można zrobić nowy serwis w pliku ///etc/systemd/system/journalsyslog.service// : [Unit] Description=Send Journalctl to Syslog [Service] TimeoutStartSec=0 ExecStart=/bin/sh -c '/usr/bin/journalctl -o short-iso -f | ncat -u log1.ping.local 10010' Restart=always RestartSec=11s [Install] WantedBy=multi-user.target Po uruchomieniu: # systemctl daemon-reload # systemctl enable journalsyslog # systemctl restart journalsyslog w panelu administracyjnym Grayloga będzie widać pierwsze zagregowane logi.