Continuu a mo storia nantu à cumu fà amici Exchange è ELK (iniziu ccà). Lasciami ricurdà chì sta cumminazione hè capace di processà un gran numaru di logs senza esitazione. Sta volta avemu Mulateri Di L'parlerà di quantu à ottene u scambiu u travagliu cù Logstash è cumpunenti Kibana.
Logstash in a pila ELK hè utilizatu per processà in modu intelligente i logs è preparalli per u piazzamentu in Elastic in forma di documenti, nantu à a basa di quale hè cunvenutu per custruisce diverse visualizazioni in Kibana.
rimarchevuli
Hè custituitu di dui fasi:
Stallà è cunfigurà u pacchettu OpenJDK.
Stallà è cunfigurà u pacchettu Logstash.
Stallà è cunfigurà u pacchettu OpenJDK
U pacchettu OpenJDK deve esse scaricatu è unpacked in un cartulare specificu. Allora u percorsu à questu repertoriu deve esse inseritu in e $env:Path è $env:JAVA_HOME variabili di u sistema operatore Windows:
Cuntrollamu a versione di Java:
PS C:> java -version
openjdk version "13.0.1" 2019-10-15
OpenJDK Runtime Environment (build 13.0.1+9)
OpenJDK 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)
Stallà è cunfigurà u pacchettu Logstash
Scaricate l'archiviu cù a distribuzione Logstash da quì. L'archiviu deve esse unpacked à a radica di u discu. Unpack à u cartulare C:Program Files Ùn vale a pena, Logstash ricusarà di principià normalmente. Allora vi tocca à entre in u schedariu jvm.options correzioni rispunsevuli di assignà RAM per u prucessu Java. Vi cunsigliu di specificà a mità di a RAM di u servitore. S'ellu hà 16 GB di RAM à bordu, allora i chjavi predeterminati sò:
-Xms1g
-Xmx1g
deve esse rimpiazzatu cù:
-Xms8g
-Xmx8g
Inoltre, hè cunsigliu di cummentà a linea -XX:+UseConcMarkSweepGC. Più nantu à questu ccà. U prossimu passu hè di creà una cunfigurazione predeterminata in u schedariu logstash.conf:
Cù sta cunfigurazione, Logstash leghje e dati da a cunsola, u passa per un filtru viotu, è i rimette à a cunsola. Utilizà sta cunfigurazione pruverà a funziunalità di Logstash. Per fà questu, eseguimu in modu interattivu:
PS C:...bin> .logstash.bat -f .logstash.conf
...
[2019-12-19T11:15:27,769][INFO ][logstash.javapipeline ][main] Pipeline started {"pipeline.id"=>"main"}
The stdin plugin is now waiting for input:
[2019-12-19T11:15:27,847][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2019-12-19T11:15:28,113][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
Logstash hà lanciatu cù successu in u portu 9600.
U passu finali di a stallazione: lanciate Logstash cum'è un serviziu Windows. Questu pò esse fattu, per esempiu, cù u pacchettu NSSM:
PS C:...bin> .nssm.exe install logstash
Service "logstash" installed successfully!
tolleranza à i difetti
A sicurità di i logs quandu sò trasferiti da u servitore fonte hè assicurata da u mecanismu di fila persistenti.
Cumu travagliu
U layout di fila durante u processu di log hè: input → queue → filter + output.
U plugin di input riceve dati da una fonte di log, scrive in una fila, è manda cunferma chì i dati sò stati ricevuti à a fonte.
I missaghji da a fila sò processati da Logstash, passati per u filtru è u plugin di output. Quandu riceve cunferma da a pruduzzioni chì u logu hè statu mandatu, Logstash elimina u logu processatu da a fila. Se Logstash si ferma, tutti i missaghji è i missaghji micca processati per i quali nisuna cunferma hè stata ricevuta restanu in a fila, è Logstash continuarà à processà a prossima volta chì principia.
cutter
Ajustable da e chjave in u schedariu C:Logstashconfiglogstash.yml:
queue.type: (valori pussibuli - persisted и memory (default)).
path.queue: (percorsu à u cartulare cù i schedarii di fila, chì sò almacenati in C: Logstashqueue per difettu).
queue.page_capacity: (dimensione massima di a pagina di fila, u valore predeterminatu hè 64 MB).
queue.drain: (true / false - attiva / disattiva a stopping processing fila prima di chjude Logstash. Ùn ricumandemu micca di attivà, perchè questu affettarà direttamente a velocità di chjusu di u servitore).
queue.max_events: (numaru massimu di avvenimenti in a fila, predeterminatu hè 0 (illimitatu)).
queue.max_bytes: (taglia massima di fila in byte, predefinitu - 1024mb (1gb)).
Se cunfiguratu queue.max_events и queue.max_bytes, allura i missaghji ùn sò più accettati in a fila quandu u valore di qualsiasi di sti paràmetri hè righjuntu. Sapete di più nantu à e file persistenti ccà.
Un esempiu di a parte di logstash.yml rispunsevuli di stallà a fila:
queue.type: persisted
queue.max_bytes: 10gb
cutter
A cunfigurazione di Logstash hè generalmente custituita da trè parti, rispunsevuli di e diverse fasi di trasfurmazioni di logs in entrata: riceve (sezzione di input), parsing (sezzione di filtru) è mandà à Elastic (sezzione di output). Sottu avemu da piglià un ochju più vicinu à ognunu di elli.
entrée
Ricevemu u flussu in entrata cù logs crudi da l'agenti filebeat. Hè stu plugin chì indichemu in a sezione di input:
input {
beats {
port => 5044
}
}
Dopu à sta cunfigurazione, Logstash principia à sente u portu 5044, è quandu riceve logs, li processa secondu i paràmetri di a sezione di filtru. In casu di necessariu, pudete chjappà u canali per riceve logs da filebit in SSL. Leghjite più nantu à i paràmetri di u plugin beats ccà.
Filter
Tutti i logs di testu chì sò interessanti per u processu chì Exchange genera sò in formatu csv cù i campi descritti in u schedariu di logu stessu. Per l'analisi di record csv, Logstash ci offre trè plugins: dissecà, csv è grok. U primu hè u più rapidu, ma copes with parsing only the simple logs.
Per esempiu, dividerà u seguente record in dui (per via di a prisenza di una virgola in u campu), per quessa chì u logu serà analizatu incorrectamente:
A cunfigurazione di Logstash vi permette di utilizà dichjarazioni cundiziunali, cusì pudemu mandà solu logs chì sò stati marcati cù u tag filebeat à u plugin dissect IIS. Dentru u plugin currispondemu i valori di u campu cù i so nomi, sguassate u campu originale message, chì cuntene una entrata da u logu, è pudemu aghjunghje un campu persunalizatu chì, per esempiu, cuntene u nome di l'appiecazione da quale cogliemu logs.
In u casu di logs di seguimentu, hè megliu aduprà u plugin csv; pò processà currettamente i campi cumplessi:
Dentru u plugin currispondemu i valori di u campu cù i so nomi, sguassate u campu originale message (è ancu campi tenant-id и schema-version), chì cuntene una entrata da u logu, è pudemu aghjunghje un campu persunalizatu, chì, per esempiu, cuntene u nome di l'appiecazione da quale cogliemu logs.
À l'uscita da a tappa di filtrazione, riceveremu documenti in una prima approssimazione, pronti per a visualizazione in Kibana. Ci mancherà i seguenti:
I campi numerichi seranu ricunnisciuti cum'è testu, chì impedisce l'operazione nantu à elli. Vale à dì i campi time-taken Log IIS, è ancu campi recipient-count и total-bites Log Tracking.
U timestamp standard di u documentu cuntene u tempu chì u logu hè statu processatu, micca u tempu chì hè statu scrittu da u servitore.
chjosu recipient-address Serà cum'è un situ di custruzzione, chì ùn permette micca l'analisi per cuntà i destinatari di e lettere.
Hè ora di aghjunghje un pocu di magia à u prucessu di trasfurmazioni di log.
Cunvertisce campi numerichi
U plugin dissect hà una opzione convert_datatype, chì pò esse usatu per cunvertisce un campu di testu à un furmatu digitale. Per esempiu, cusì:
Hè vale a pena ricurdà chì stu metudu hè adattatu solu se u campu certamenti cuntene una stringa. L'opzione ùn processa micca i valori nulli da i campi è lancia una eccezzioni.
Per tracking logs, hè megliu micca aduprà un metudu di cunversione simili, postu chì i campi recipient-count и total-bites pò esse viotu. Per cunvertisce questi campi hè megliu aduprà un plugin mutà:
Spliting recipient_address in destinatari individuali
Stu prublema pò ancu esse risoltu cù u plugin mutate:
mutate {
split => ["recipient_address", ";"]
}
Cambia u timestamp
In u casu di logs di seguimentu, u prublema hè facilmente risoltu da u plugin data, chì vi aiuterà à scrive in u campu timestamp data è ora in u formatu necessariu da u campu date-time:
date {
match => [ "date-time", "ISO8601" ]
timezone => "Europe/Moscow"
remove_field => [ "date-time" ]
}
In u casu di logs IIS, avemu bisognu di cumminà i dati di u campu date и time aduprendu u plugin mutante, registrate u fusu orariu chì avemu bisognu è mette stu stampu di tempu timestamp usendu u plugin di data:
A sezione di output hè aduprata per mandà logs processati à u ricevitore di log. In casu di mandà direttamente à Elastic, un plugin hè utilizatu elasticsearch, chì specifica l'indirizzu di u servitore è u mudellu di nome d'indici per mandà u documentu generatu: