Aħna ħbieb ma 'ELK u Skambju. Parti 2

Aħna ħbieb ma 'ELK u Skambju. Parti 2

Inkompli l-istorja tiegħi dwar kif tagħmel ħbieb Exchange u ELK (bidu hawn). Ħa nfakkarkom li din il-kombinazzjoni hija kapaċi tipproċessa numru kbir ħafna ta 'zkuk mingħajr eżitazzjoni. Din id-darba ser nitkellmu dwar kif l-Exchange taħdem mal-komponenti Logstash u Kibana.

Logstash fil-munzell ELK jintuża biex jipproċessa b'mod intelliġenti zkuk u jippreparahom għat-tqegħid f'Elastic fil-forma ta 'dokumenti, li fuq il-bażi tagħhom huwa konvenjenti li jinbnew diversi viżwalizzazzjonijiet f'Kibana.

Installazzjoni

Tikkonsisti f'żewġ stadji:

  • L-installazzjoni u l-konfigurazzjoni tal-pakkett OpenJDK.
  • Installazzjoni u konfigurazzjoni tal-pakkett Logstash.

L-installazzjoni u l-konfigurazzjoni tal-pakkett OpenJDK

Il-pakkett OpenJDK għandu jitniżżel u jitneħħa f'direttorju speċifiku. Imbagħad il-mogħdija għal dan id-direttorju trid tiddaħħal fil-varjabbli $env:Path u $env:JAVA_HOME tas-sistema operattiva Windows:

Aħna ħbieb ma 'ELK u Skambju. Parti 2

Aħna ħbieb ma 'ELK u Skambju. Parti 2

Ejja niċċekkja l-verżjoni 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)

Installazzjoni u konfigurazzjoni tal-pakkett Logstash

Niżżel il-fajl tal-arkivju bid-distribuzzjoni Logstash għalhekk. L-arkivju għandu jiġi żppakkjat sal-għerq tad-diska. Spakkja mal-folder C:Program Files Mhuwiex worth it, Logstash se jirrifjuta li jibda b'mod normali. Imbagħad għandek bżonn tidħol fil-fajl jvm.options jiffissa responsabbli għall-allokazzjoni RAM għall-proċess Java. Nirrakkomanda li tispeċifika nofs ir-RAM tas-server. Jekk ikollu 16 GB RAM abbord, allura ċ-ċwievet default huma:

-Xms1g
-Xmx1g

għandhom jiġu sostitwiti bi:

-Xms8g
-Xmx8g

Barra minn hekk, huwa rakkomandabbli li tikkummenta l-linja -XX:+UseConcMarkSweepGC. Aktar dwar dan hawn. Il-pass li jmiss huwa li toħloq konfigurazzjoni default fil-fajl logstash.conf:

input {
 stdin{}
}
 
filter {
}
 
output {
 stdout {
 codec => "rubydebug"
 }
}

B'din il-konfigurazzjoni, Logstash jaqra d-dejta mill-console, jgħaddiha minn filtru vojt, u joħroġha lura lill-console. L-użu ta 'din il-konfigurazzjoni se jittestja l-funzjonalità ta' Logstash. Biex tagħmel dan, ejja nħaddmuh fil-mod interattiv:

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 tnieda b'suċċess fuq il-port 9600.

L-aħħar pass tal-installazzjoni: tniedi Logstash bħala servizz tal-Windows. Dan jista 'jsir, pereżempju, bl-użu tal-pakkett NSSM:

PS C:...bin> .nssm.exe install logstash
Service "logstash" installed successfully!

tolleranza għall-ħsarat

Is-sigurtà taz-zkuk meta jiġu trasferiti mis-server tas-sors hija żgurata mill-mekkaniżmu tal-Kjuwijiet Persistenti.

Kif taħdem

It-tqassim tal-kjuwijiet waqt l-ipproċessar tal-log huwa: input → kju → filtru + output.

Il-plugin tal-input jirċievi dejta minn sors ta 'log, jiktebha fi kju, u jibgħat konferma li d-dejta tkun waslet lis-sors.

Messaġġi mill-kju huma pproċessati minn Logstash, mgħoddija mill-filtru u l-plugin tal-output. Meta tirċievi konferma mill-output li r-reġistru ntbagħat, Logstash ineħħi r-reġistru pproċessat mill-kju. Jekk Logstash jieqaf, il-messaġġi u l-messaġġi kollha mhux ipproċessati li għalihom ma tkun waslet l-ebda konferma jibqgħu fil-kju, u Logstash se jkompli jipproċessahom ladarba li jmiss jibda.

aġġustament

Aġġustabbli minn ċwievet fil-fajl C:Logstashconfiglogstash.yml:

  • queue.type: (valuri possibbli - persisted и memory (default)).
  • path.queue: (mogħdija għall-folder bil-fajls tal-kju, li huma maħżuna f'C:Logstashqueue b'mod awtomatiku).
  • queue.page_capacity: (id-daqs massimu tal-paġna tal-kju, il-valur default huwa 64mb).
  • queue.drain: (veru/falz - jippermetti/jiddiżattiva l-waqfien tal-ipproċessar tal-kju qabel ma jagħlaq Logstash. Ma nirrakkomandax li tkun attivata, għax dan jaffettwa direttament il-veloċità tal-għeluq tas-server).
  • queue.max_events: (numru massimu ta' avvenimenti fil-kju, default huwa 0 (illimitat)).
  • queue.max_bytes: (daqs massimu tal-kju f'bytes, default - 1024mb (1gb)).

Jekk ikkonfigurat queue.max_events и queue.max_bytes, imbagħad il-messaġġi jieqfu jiġu aċċettati fil-kju meta jintlaħaq il-valur ta' kwalunkwe minn dawn is-settings. Tgħallem aktar dwar Kjuwijiet Persistenti hawn.

Eżempju tal-parti ta' logstash.yml responsabbli għat-twaqqif tal-kju:

queue.type: persisted
queue.max_bytes: 10gb

aġġustament

Il-konfigurazzjoni ta 'Logstash ġeneralment tikkonsisti fi tliet partijiet, responsabbli għal fażijiet differenti ta' pproċessar ta 'zkuk deħlin: riċeviment (sezzjoni ta' input), parsing (sezzjoni tal-filtru) u tibgħat lil Elastic (taqsima tal-output). Hawn taħt se nagħtu ħarsa aktar mill-qrib lejn kull wieħed minnhom.

input

Nirċievu l-fluss deħlin bi zkuk mhux ipproċessati minn aġenti filebeat. Huwa dan il-plugin li aħna nindikaw fit-taqsima tal-input:

input {
  beats {
    port => 5044
  }
}

Wara din il-konfigurazzjoni, Logstash jibda jisma 'l-port 5044, u meta jirċievi zkuk, jipproċessahom skont is-settings tat-taqsima tal-filtru. Jekk meħtieġ, tista 'wrap il-kanal biex tirċievi zkuk minn filebit f'SSL. Aqra aktar dwar is-settings tal-plugin tal-beats hawn.

Iffiltra

Ir-reġistri tat-test kollha li huma interessanti għall-ipproċessar li tiġġenera Exchange huma f'format csv bl-oqsma deskritti fil-fajl tal-ġurnal innifsu. Għall-parsing tar-rekords csv, Logstash joffrilna tliet plugins: iddissettja, csv u grok. L-ewwel waħda hija l-aktar malajr, iżda tlaħħaq ma 'parsing biss l-aktar sempliċi zkuk.
Pereżempju, se jaqsam ir-rekord li ġej fi tnejn (minħabba l-preżenza ta 'virgola ġewwa l-qasam), u huwa għalhekk li l-ġurnal se jiġi analizzat b'mod żbaljat:

…,"MDB:GUID1, Mailbox:GUID2, Event:526545791, MessageClass:IPM.Note, CreationTime:2020-05-15T12:01:56.457Z, ClientType:MOMT, SubmissionAssistant:MailboxTransportSubmissionEmailAssistant",…

Jista 'jintuża meta jiġu analizzati zkuk, pereżempju, IIS. F'dan il-każ, is-sezzjoni tal-filtru tista' tidher bħal din:

filter {
  if "IIS" in [tags] {
    dissect {
      mapping => {
        "message" => "%{date} %{time} %{s-ip} %{cs-method} %{cs-uri-stem} %{cs-uri-query} %{s-port} %{cs-username} %{c-ip} %{cs(User-Agent)} %{cs(Referer)} %{sc-status} %{sc-substatus} %{sc-win32-status} %{time-taken}"
      }
      remove_field => ["message"]
      add_field => { "application" => "exchange" }
    }
  }
} 

Il-konfigurazzjoni ta 'Logstash tippermettilek tuża dikjarazzjonijiet kundizzjonali, għalhekk nistgħu nibagħtu biss zkuk li kienu mmarkati bit-tikketta filebeat lill-plugin dissect IIS. Ġewwa l-plugin aħna nqabblu l-valuri tal-kamp bl-ismijiet tagħhom, ħassar il-qasam oriġinali message, li kien fih daħla mir-reġistru, u nistgħu nżidu qasam tad-dwana li, pereżempju, ikun fih l-isem tal-applikazzjoni li minnha niġbru zkuk.

Fil-każ ta 'traċċar ta' zkuk, huwa aħjar li tuża l-plugin csv; jista 'jipproċessa b'mod korrett oqsma kumplessi:

filter {
  if "Tracking" in [tags] {
    csv {
      columns => ["date-time","client-ip","client-hostname","server-ip","server-hostname","source-context","connector-id","source","event-id","internal-message-id","message-id","network-message-id","recipient-address","recipient-status","total-bytes","recipient-count","related-recipient-address","reference","message-subject","sender-address","return-path","message-info","directionality","tenant-id","original-client-ip","original-server-ip","custom-data","transport-traffic-type","log-id","schema-version"]
      remove_field => ["message", "tenant-id", "schema-version"]
      add_field => { "application" => "exchange" }
    }
}

Ġewwa l-plugin aħna nqabblu l-valuri tal-kamp bl-ismijiet tagħhom, ħassar il-qasam oriġinali message (u wkoll oqsma tenant-id и schema-version), li kien fih entrata mil-log, u nistgħu nżidu qasam tad-dwana, li, pereżempju, ikun fih l-isem tal-applikazzjoni li minnha niġbru zkuk.

Fil-ħruġ mill-istadju tal-filtrazzjoni, se nirċievu dokumenti fl-ewwel approssimazzjoni, lesti għall-viżwalizzazzjoni f'Kibana. Se nkunu qed nitilfu dan li ġej:

  • L-oqsma numeriċi se jiġu rikonoxxuti bħala test, li jipprevjeni operazzjonijiet fuqhom. Jiġifieri, l-oqsma time-taken log IIS, kif ukoll oqsma recipient-count и total-bites Log Tracking.
  • Il-timestamp standard tad-dokument se jkun fih il-ħin li r-reġistru ġie pproċessat, mhux il-ħin li nkiteb fuq in-naħa tas-server.
  • Qasam recipient-address se tidher qisha sit ta' kostruzzjoni wieħed, li ma jippermettix analiżi biex jingħaddu r-riċevituri tal-ittri.

Wasal iż-żmien li żżid ftit magic mal-proċess tal-ipproċessar tal-log.

Konverżjoni ta' oqsma numeriċi

Il-plugin dissect għandu għażla convert_datatype, li jista 'jintuża biex jikkonverti qasam ta' test għal format diġitali. Per eżempju, bħal dan:

dissect {
  …
  convert_datatype => { "time-taken" => "int" }
  …
}

Ta 'min jiftakar li dan il-metodu huwa adattat biss jekk il-qasam definittivament ikun fih spag. L-għażla ma tipproċessax valuri Null minn oqsma u tarmi eċċezzjoni.

Għat-traċċar taz-zkuk, huwa aħjar li ma tużax metodu ta 'konverżjoni simili, peress li l-oqsma recipient-count и total-bites jista’ jkun vojt. Biex tikkonverti dawn l-oqsma huwa aħjar li tuża plugin immuta:

mutate {
  convert => [ "total-bytes", "integer" ]
  convert => [ "recipient-count", "integer" ]
}

Qsim ta' destinatarju_indirizz f'riċevituri individwali

Din il-problema tista 'tiġi solvuta wkoll bl-użu tal-plugin mutate:

mutate {
  split => ["recipient_address", ";"]
}

Nibdlu l-timestamp

Fil-każ ta 'tracking logs, il-problema tissolva faċilment mill-plugin data, li tgħinek tikteb fil-qasam timestamp data u ħin fil-format meħtieġ mill-field date-time:

date {
  match => [ "date-time", "ISO8601" ]
  timezone => "Europe/Moscow"
  remove_field => [ "date-time" ]
}

Fil-każ ta' zkuk IIS, ikollna bżonn ngħaqqdu d-dejta tal-qasam date и time billi tuża l-plugin mutate, irreġistra ż-żona tal-ħin li għandna bżonn u poġġi dan it-timbru tal-ħin fih timestamp billi tuża l-plugin tad-data:

mutate { 
  add_field => { "data-time" => "%{date} %{time}" }
  remove_field => [ "date", "time" ]
}
date { 
  match => [ "data-time", "YYYY-MM-dd HH:mm:ss" ]
  timezone => "UTC"
  remove_field => [ "data-time" ]
}

output

Is-sezzjoni tal-output tintuża biex tibgħat zkuk ipproċessati lir-riċevitur tar-reġistru. Fil-każ li jintbagħat direttament lil Elastic, jintuża plugin elasticsearch, li jispeċifika l-indirizz tas-server u l-mudell tal-isem tal-indiċi biex jintbagħat id-dokument iġġenerat:

output {
  elasticsearch {
    hosts => ["127.0.0.1:9200", "127.0.0.2:9200"]
    manage_template => false
    index => "Exchange-%{+YYYY.MM.dd}"
  }
}

Konfigurazzjoni finali

Il-konfigurazzjoni finali se tidher bħal din:

input {
  beats {
    port => 5044
  }
}
 
filter {
  if "IIS" in [tags] {
    dissect {
      mapping => {
        "message" => "%{date} %{time} %{s-ip} %{cs-method} %{cs-uri-stem} %{cs-uri-query} %{s-port} %{cs-username} %{c-ip} %{cs(User-Agent)} %{cs(Referer)} %{sc-status} %{sc-substatus} %{sc-win32-status} %{time-taken}"
      }
      remove_field => ["message"]
      add_field => { "application" => "exchange" }
      convert_datatype => { "time-taken" => "int" }
    }
    mutate { 
      add_field => { "data-time" => "%{date} %{time}" }
      remove_field => [ "date", "time" ]
    }
    date { 
      match => [ "data-time", "YYYY-MM-dd HH:mm:ss" ]
      timezone => "UTC"
      remove_field => [ "data-time" ]
    }
  }
  if "Tracking" in [tags] {
    csv {
      columns => ["date-time","client-ip","client-hostname","server-ip","server-hostname","source-context","connector-id","source","event-id","internal-message-id","message-id","network-message-id","recipient-address","recipient-status","total-bytes","recipient-count","related-recipient-address","reference","message-subject","sender-address","return-path","message-info","directionality","tenant-id","original-client-ip","original-server-ip","custom-data","transport-traffic-type","log-id","schema-version"]
      remove_field => ["message", "tenant-id", "schema-version"]
      add_field => { "application" => "exchange" }
    }
    mutate {
      convert => [ "total-bytes", "integer" ]
      convert => [ "recipient-count", "integer" ]
      split => ["recipient_address", ";"]
    }
    date {
      match => [ "date-time", "ISO8601" ]
      timezone => "Europe/Moscow"
      remove_field => [ "date-time" ]
    }
  }
}
 
output {
  elasticsearch {
    hosts => ["127.0.0.1:9200", "127.0.0.2:9200"]
    manage_template => false
    index => "Exchange-%{+YYYY.MM.dd}"
  }
}

Ħoloq utli:

Sors: www.habr.com

Żid kumment