Rozpoczynam serię artykułów, w których chcę podzielić się swoim doświadczeniem związanym z łączeniem Exchange i ELK. Ten stos technologiczny pomoże w przetwarzaniu dużych wolumenów logów, eliminując obawy o to, przy jakiej wielkości tradycyjne narzędzia do logowania przestaną być pomocne. Poznajmy nowego gracza w świecie logów.
Exchange dysponuje dość rozbudowanym systemem logowania. Najczęściej wykorzystywane logi to logi śledzenia, które monitorują krok po kroku przebieg konkretnej wiadomości w organizacji pocztowej; logi serwera WWW, które śledzą każdą nową sesję użytkownika w systemie, oraz logi konkretnych aplikacji internetowych o różnym poziomie szczegółowości sesji. Ponadto Exchange potrafi przechowywać surowe logi protokołów smtp, imap i pop3.
Jakie narzędzia możemy wykorzystać do pracy z logami:
- Wbudowany cmdlet Get-MessageTrackingLog: umożliwia wygodne przetwarzanie logów śledzenia;
- Narzędzie logparser: wykorzystuje pseudo-język SQL do logowania w celu wyszukiwania i działa dość szybko;
- Zewnętrzny serwer SQL: do szczególnych przypadków (na przykład analizy danych w długich okresach czasowych).
To wszystko sprawdza się dobrze, gdy mamy kilka serwerów, a objętość przetwarzanych logów mierzy się w dziesiątkach lub setkach gigabajtów. A co, jeśli liczba serwerów przekracza dziesiątki, a wielkość logów przeszła terabajt? W takim przypadku najprawdopodobniej ten schemat zacznie się sypać.
I oto, co się dzieje: Get-MessageTrackingLog zaczyna się zawieszać z powodu przekroczenia czasu, logparser natrafia na limit 32-bitowej architektury, a wyeksportowanie do serwera SQL łamie się w najmniej odpowiednim momencie, nie przetwarzając wieloliniowego wyjątku od usługi.
Na scenie pojawia się nowy gracz – stos ELK, który został specjalnie zaprojektowany do żonglowania ogromnymi ilościami logów w rozsądnych terminach i z tolerowalnym zużyciem zasobów.
W pierwszej części szczegółowo opiszę, jak podłączyć filebeat, który należy do części stosu ELK — odpowiedzialny za odczyt i wysyłanie prostych plików tekstowych, w które różne aplikacje zapisują swoje logi. W kolejnych artykułach skoncentrujemy się na komponentach Logstash i Kibana.
Instalacja
Zatem plik archiwum agenta filebeat .
Wykonamy instalację poprzez proste wypakowanie zawartości pliku zip. Na przykład w c:Program Filesfilebeat. Następnie należy uruchomić skrypt PowerShell install-service-filebeat.ps1, który jest dołączony, do instalacji usługi filebeat.
Teraz jesteśmy gotowi, aby rozpocząć konfigurację pliku konfiguracyjnego.
Odporność na awarie
Filebeat zapewnia dostarczenie logów do systemu zbierania logów. Realizuje to poprzez prowadzenie rejestru wpisów w plikach logów. W rejestrze przechowywane są informacje o tych wpisach, które zostały odczytane z plików logów, oraz oznaczane są konkretne wpisy, które udało się dostarczyć do miejsca docelowego.
Jeśli jakiś wpis nie może zostać dostarczony, filebeat spróbuje wysłać go ponownie, aż otrzyma od systemu odbiorczego potwierdzenie dostarczenia lub oryginalny plik logu zostanie usunięty w trakcie rotacji.
Podczas ponownego uruchamiania usługi filebeat odczyta z rejestru informacje o ostatnich odczytanych i dostarczonych wpisach i będzie odczytywać wpisy w plikach logów, opierając się na informacjach w rejestrze.
Pozwoli to zminimalizować ryzyko utraty informacji o logach, które należy wysłać na serwery elasticlogstash, w trakcie nieprzewidzianych awarii i operacji utrzymaniowych serwerów.
Więcej o tym można : Jak Filebeat utrzymuje stan plików i Jak Filebeat zapewnia co najmniej jedno dostarczenie?
Konfiguracja
Cała konfiguracja wykonywana jest w pliku konfiguracyjnym w formacie yml, który podzielony jest na kilka sekcji. Rozważmy niektóre z nich, które biorą udział w procesie zbierania logów z serwerów Exchange.
Sekcja przetwarzania logów
Sekcja przetwarzania logów zaczyna się od pola:
filebeat.inputs:Będziemy używać wspólnego narzędzia do zbierania logów:
- type: logNastępnie podajemy status (włączony) i ścieżki do folderu z logami. Na przykład, w przypadku logów IIS ustawienia mogą być następujące:
enabled: true
paths:
- C:inetpublogsLogFilesW3SVC1*.log
- C:inetpublogsLogFilesW3SVC2*.log
Jeszcze jedna ważna konfiguracja: jak filebeat powinien odczytywać wieloliniowe wpisy. Domyślnie filebeat traktuje jedną linię pliku logu jako jeden wpis. Działa to dobrze, dopóki nie zaczynają przychodzić wyjątki związane z nieprawidłowym działaniem usługi. W takim przypadku wyjątki mogą składać się z kilku linii. Dlatego filebeat powinien traktować wpis wieloliniowy jako jeden, jeśli następna linia zaczyna się od daty. Format wpisów logów w Exchange jest taki: każdy nowy wpis w pliku logu zaczyna się od daty. W konfiguracji to warunek wygląda następująco:
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: afterWarto dodać tagi do wysyłanego wpisu, na przykład:
tags: ['IIS', 'ex-srv1']I nie zapomnij wykluczyć z przetwarzania linii rozpoczynających się od znaku hash:
exclude_lines: ['^#']Tak więc blok czytania logów będzie wyglądał następująco:
filebeat.inputs:
- type: log
enabled: true
paths:
- C:inetpublogsLogFilesW3SVC1*.log
- C:inetpublogsLogFilesW3SVC2*.log
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
tags: ['IIS', 'ex-srv1']
exclude_lines: ['^#']Blok wysyłania logów
Poszczególne wpisy w pliku log filebeat są wysyłane jako obiekt json, w którym konkretna informacja z logu zawarta jest w pojedynczym polu message. Jeśli chcemy w jakiś sposób pracować z tymi danymi, musimy wcześniej rozparsować to pole na osobne pola. Można to zrobić, na przykład, w logstash. Będzie on odbiorcą wpisów z filebeat. Oto jak może to wyglądać w pliku konfiguracyjnym filebeat:
output.logstash:
hosts: ["logstash1.domain.com:5044"]
Jeśli jest kilka serwerów, można włączyć równoważenie obciążenia: wtedy filebeat będzie wysyłał logi nie do pierwszego dostępnego serwera z listy, ale rozdzielał wysyłane logi pomiędzy kilka serwerów:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true Filebeat, przetwarzając logi w wysyłanym json, oprócz wpisu logu, który zawarty jest w polu message, dodaje pewną ilość metadanych, co wpływa na rozmiar dokumentu trafiającego do elastyczności. Te metadane można selektywnie usunąć z wysyłki. Robi się to w bloku processor za pomocą procesora drop_fields. Można wykluczyć, na przykład, następujące pola:
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]Do wyboru wykluczanych pól należy podchodzić ostrożnie, ponieważ część z nich może być używana po stronie elastycznej do tworzenia indeksów.
Tak więc blok wysyłania logów będzie wyglądał następująco:
output.logstash:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]Ustawienia logowania filebeat
Warto ustawić następujące ustawienia logowania:
- Poziom logowania info;
- Rejestrujemy logi w plikach umiejscowionych domyślnie (w katalogu logs, w katalogu instalacyjnym filebeat);
- Nazwa pliku logu — filebeat;
- Przechowywać ostatnie 10 plików logów;
- Rozpocznij rotację przy osiągnięciu rozmiaru 1 MB.
Ostateczna blokada konfiguracji logowania będzie wyglądać następująco:
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576Ostateczna konfiguracja
Zebraliśmy konfigurację, teraz wygląda to następująco:
filebeat.inputs:
- type: log
enabled: true
paths:
- C:inetpublogsLogFilesW3SVC1*.log
- C:inetpublogsLogFilesW3SVC2*.log
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
tags: ['IIS', 'ex-srv1']
exclude_lines: ['^#']
output.logstash:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576Ważne jest, aby zrozumieć, że format pliku konfiguracyjnego to yml. Dlatego ważne jest, aby prawidłowo ustawiać spacje i znaki minus.
Filebeat potrafi sprawdzać plik konfiguracyjny i, jeśli składnia będzie zawierać błędy, wskaże, w którym wierszu i w którym miejscu wiersza składnia jest nieprawidłowa. Sprawdzenie wykonuje się w następujący sposób:
.filebeat.exe test configPonadto filebeat potrafi sprawdzać dostępność sieciową odbiornika logów. Sprawdzenie uruchamia się w ten sposób:
.filebeat.exe test outputW kolejnych częściach opowiem o podłączeniu i współpracy Exchange z komponentami Logstash i Kibana.
Przydatne linki
Źródło: habr.com
