Táimid cairde le ELK agus Exchange. Cuid 2

Táimid cairde le ELK agus Exchange. Cuid 2

Leanaim ar aghaidh le mo scéal faoi conas cairde a dhéanamh Exchange agus ELK (ag tosú anseo). Lig dom i gcuimhne duit go bhfuil an teaglaim seo in ann líon an-mhór logs a phróiseáil gan leisce. An uair seo beidh muid ag caint faoi conas a fháil Exchange ag obair le comhpháirteanna Logstash agus Kibana.

Úsáidtear Logstash sa chruach ELK chun logaí a phróiseáil go cliste agus iad a ullmhú le haghaidh socrúcháin i Leaisteacha i bhfoirm doiciméad, ar a mbonn tá sé áisiúil léirshamhlú éagsúla a thógáil i Kibana.

Suiteáil

Tá dhá chéim ann:

  • Suiteáil agus cumraíocht an phacáiste OpenJDK.
  • Suiteáil agus cumraíocht an phacáiste Logstash.

Suiteáil agus cumraíocht an phacáiste OpenJDK

Ní mór an pacáiste OpenJDK a íoslódáil agus a dhíphacáil isteach in eolaire ar leith. Ansin ní mór an chonair chuig an eolaire seo a chur isteach sna hathróga $env:Path agus $env:JAVA_HOME de chóras oibriúcháin Windows:

Táimid cairde le ELK agus Exchange. Cuid 2

Táimid cairde le ELK agus Exchange. Cuid 2

Déanaimis an leagan Java a sheiceáil:

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)

Suiteáil agus cumraíocht an phacáiste Logstash

Íoslódáil an comhad cartlainne leis an dáileadh Logstash dá bhrí sin. Ní mór an chartlann a dhíphacáil go dtí fréamh an diosca. Díphacáil chuig an bhfillteán C:Program Files Ní fiú é, diúltóidh Logstash tosú de ghnáth. Ansin ní mór duit dul isteach sa chomhad jvm.options réitigh freagrach as RAM a leithdháileadh don phróiseas Java. Molaim leath de RAM an fhreastalaí a shonrú. Má tá 16 GB RAM ar bord aige, is iad na heochracha réamhshocraithe:

-Xms1g
-Xmx1g

ní mór a chur in ionad:

-Xms8g
-Xmx8g

Ina theannta sin, tá sé inmholta trácht a dhéanamh amach as an líne -XX:+UseConcMarkSweepGC. Tuilleadh faoi seo anseo. Is é an chéad chéim eile ná cumraíocht réamhshocraithe a chruthú sa chomhad logstash.conf:

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

Leis an gcumraíocht seo, léann Logstash sonraí ón gconsól, cuireann sé trí scagaire folamh é, agus cuireann sé ar ais chuig an consól é. Trí úsáid a bhaint as an gcumraíocht seo déanfar feidhmiúlacht Logstash a thástáil. Chun seo a dhéanamh, déanaimis é a rith i mód idirghníomhach:

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}

Seoladh Logstash go rathúil ar phort 9600.

An chéim suiteála deiridh: seoladh Logstash mar sheirbhís Windows. Is féidir é seo a dhéanamh, mar shampla, ag baint úsáide as an bpacáiste NSSM:

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

lamháltas locht

Cinntítear sábháilteacht logaí nuair a aistrítear iad ón bhfreastalaí foinse ag meicníocht na gCuanna Seasmhacha.

Conas a oibríonn sé

Is é leagan amach na scuainí le linn próiseála loga ná: ionchur → scuaine → scagaire + aschur.

Faigheann an breiseán ionchuir sonraí ó fhoinse logála, scríobhann sé chuig scuaine é, agus cuireann sé deimhniú go bhfuarthas na sonraí chuig an bhfoinse.

Próiseálann Logstash teachtaireachtaí ón scuaine, cuirtear iad tríd an scagaire agus an breiseán aschuir. Nuair a fhaigheann Logstash deimhniú ón aschur go bhfuil an logáil seolta, baineann Logstash an logáil phróiseáilte as an scuaine. Má stopann Logstash, fanann gach teachtaireacht neamhphróiseáilte agus teachtaireachtaí nach bhfuil aon deimhniú faighte ina leith sa scuaine, agus leanfaidh Logstash dá phróiseáil an chéad uair eile a thosaíonn sé.

coigeartú

Inchoigeartaithe le heochracha sa chomhad C:Logstashconfiglogstash.yml:

  • queue.type: (luachanna féideartha - persisted и memory (default)).
  • path.queue: (cosán go dtí an fillteán le comhaid scuaine, a stóráiltear i C:Logstashqueue de réir réamhshocraithe).
  • queue.page_capacity: (uasmhéid leathanach scuaine, is é 64mb an luach réamhshocraithe).
  • queue.drain: (fíor / bréagach - cumasaíonn / díchumasaigh stop a phróiseáil scuaine roimh shutting síos Logstash. Ní féidir liom a mholadh a chumasú, mar beidh tionchar díreach aige seo ar an luas múchadh an fhreastalaí).
  • queue.max_events: (líon uasta na n-imeachtaí sa scuaine, is é 0 (gan teorainn) an réamhshocrú).
  • queue.max_bytes: (uasmhéid scuaine i mbearta, réamhshocraithe - 1024mb (1gb)).

Má tá sé cumraithe queue.max_events и queue.max_bytes, ansin ní ghlactar le teachtaireachtaí isteach sa scuaine nuair a shroichtear luach aon cheann de na socruithe seo. Tuilleadh eolais faoi scuainí Seasmhach anseo.

Sampla den chuid de logstash.yml atá freagrach as an scuaine a shocrú:

queue.type: persisted
queue.max_bytes: 10gb

coigeartú

De ghnáth bíonn trí chuid i gcumraíocht Logstash, atá freagrach as céimeanna éagsúla de phróiseáil logaí isteach: ag fáil (alt ionchuir), parsáil (alt scagaire) agus a sheoladh chuig Elastic (alt aschuir). Anseo thíos déanfaimid breathnú níos dlúithe ar gach ceann acu.

Ionchur

Faighimid an sruth isteach le logs amh ó ghníomhairí filebeat. Is é an breiseán seo a léirímid sa rannán ionchuir:

input {
  beats {
    port => 5044
  }
}

Tar éis an chumraíocht seo, tosaíonn Logstash ag éisteacht le port 5044, agus nuair a fhaigheann sé logaí, próiseálann iad de réir socruithe an ailt scagaire. Más gá, is féidir leat an cainéal a chumhdach chun logaí a fháil ó chomhad giotán in SSL. Léigh tuilleadh faoi shocruithe breiseán beats anseo.

scagairí

Tá na logaí téacs go léir atá suimiúil le haghaidh próiseála a ghineann Malartú i bhformáid csv leis na réimsí a bhfuil cur síos orthu sa logchomhad féin. Chun taifid csv a pharsáil, cuireann Logstash trí bhreiseán ar fáil dúinn: dissect, csv agus grok. Is é an chéad cheann is mó go tapa, ach copes le parsáil ach amháin na logs is simplí.
Mar shampla, scoilfidh sé an taifead seo a leanas ina dhá cheann (mar gheall ar láithreacht camóg laistigh den pháirc), agus is é sin an fáth a ndéanfar an loga a pharsáil go mícheart:

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

Is féidir é a úsáid nuair a bhíonn logaí á bparsáil, mar shampla, IIS. Sa chás seo, d'fhéadfadh go mbeadh cuma mar seo ar an rannóg scagaire:

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" }
    }
  }
} 

Ceadaíonn cumraíocht Logstash leat é a úsáid ráitis choinníollacha, mar sin ní féidir linn ach logaí a bhí clibáilte leis an gclib comhaidbeat a sheoladh chuig an mbreiseán dissect IIS. Taobh istigh den bhreiseán déanaimid na luachanna réimse a mheaitseáil lena n-ainmneacha, scrios an réimse bunaidh message, ina raibh iontráil ón logáil, agus is féidir linn réimse saincheaptha a chur leis a mbeidh, mar shampla, ainm an fheidhmchláir óna mbailímid logaí.

I gcás logs rianaithe, is fearr an breiseán csv a úsáid; is féidir leis réimsí casta a phróiseáil i gceart:

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" }
    }
}

Taobh istigh den bhreiseán déanaimid na luachanna réimse a mheaitseáil lena n-ainmneacha, scrios an réimse bunaidh message (agus freisin réimsí tenant-id и schema-version), ina raibh iontráil ón logáil, agus is féidir linn réimse saincheaptha a chur leis, ina mbeidh, mar shampla, ainm an fheidhmchláir óna mbailímid logaí.

Ag an mbealach amach ón gcéim scagtha, gheobhaidh muid doiciméid sa chéad chomhfhogasú, réidh le haghaidh léirshamhlú i Kibana. Beidh na rudaí seo a leanas in easnamh orainn:

  • Aithneofar réimsí uimhriúla mar théacs, rud a chuireann cosc ​​ar oibríochtaí orthu. Eadhon, na réimsí time-taken IIS logáil, chomh maith le réimsí recipient-count и total-bites Rianú Logála.
  • Cuimseoidh stampa ama an doiciméid chaighdeánaigh an t-am ar próiseáladh an loga, ní an t-am ar scríobhadh é ar thaobh an fhreastalaí.
  • Réimse recipient-address Beidh cuma láithreán tógála amháin, nach gceadaíonn anailís chun faighteoirí litreacha a chomhaireamh.

Tá sé in am beagán draíochta a chur leis an bpróiseas próiseála log.

Réimsí uimhriúla a thiontú

Tá rogha ag an mbreiseán dissect convert_datatype, ar féidir a úsáid chun réimse téacs a thiontú go formáid dhigiteach. Mar shampla, mar seo:

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

Is fiú a mheabhrú nach bhfuil an modh seo oiriúnach ach amháin má tá sreang cinnte sa réimse. Ní phróiseálann an rogha luachanna Null ó réimsí agus caitheann sé eisceacht.

Chun logs rianú, tá sé níos fearr gan úsáid a bhaint as modh comhshó den chineál céanna, ós rud é na réimsí recipient-count и total-bites d’fhéadfadh a bheith folamh. Chun na réimsí seo a thiontú is fearr breiseán a úsáid mutate:

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

Ag scoilteadh faighteoir_seoladh isteach i bhfaighteoirí aonair

Is féidir an fhadhb seo a réiteach freisin leis an mbreiseán mutate:

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

Athrú ar an stampa ama

I gcás logs rianaithe, is furasta an fhadhb a réiteach ag an breiseán sonraí, a chabhróidh leat scríobh sa réimse timestamp dáta agus am san fhormáid riachtanach ón réimse date-time:

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

I gcás logaí IIS, beidh orainn sonraí allamuigh a chomhcheangal date и time ag baint úsáide as an mbreiseán mutate, cláraigh an crios ama a theastaíonn uainn agus cuir an stampa ama seo isteach timestamp ag baint úsáide as an breiseán dáta:

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" ]
}

Aschur

Úsáidtear an rannóg aschuir chun logaí próiseáilte a sheoladh chuig an nglacadóir loga. I gcás é a sheoladh go díreach chuig Elastic, úsáidtear breiseán leaisteachas, a shonraíonn seoladh an fhreastalaí agus an teimpléad ainm innéacs chun an doiciméad ginte a sheoladh:

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

Cumraíocht deiridh

Breathnóidh an chumraíocht deiridh mar seo:

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}"
  }
}

Naisc úsáideacha:

Foinse: will.com

Add a comment