Mpinamana amin'ny ELK sy Exchange izahay. Fizarana 2

Mpinamana amin'ny ELK sy Exchange izahay. Fizarana 2

Tohizako ny tantarako momba ny fomba hahazoana namana Exchange sy ELK (manomboka eto). MamelΓ  ahy hampahatsiahy anao fa ity fitambarana ity dia mahavita manamboatra logs marobe tsy misy fisalasalana. Amin'ity indray mitoraka ity dia hiresaka momba ny fomba ahafahan'ny Exchange miasa miaraka amin'ny singa Logstash sy Kibana isika.

Ny logstash ao amin'ny stack ELK dia ampiasaina amin'ny fanodinana am-pahibemaso ny logs ary manomana azy ireo amin'ny fametrahana azy ao amin'ny Elastic amin'ny endrika antontan-taratasy, mifototra amin'izany dia mety ny fananganana sary isan-karazany ao Kibana.

fametrahana

Misy dingana roa:

  • Fametrahana sy fanamboarana ny fonosana OpenJDK.
  • Fametrahana sy fanamboarana ny fonosana Logstash.

Fametrahana sy fanamboarana ny fonosana OpenJDK

Ny fonosana OpenJDK dia tsy maintsy alaina ary avoaka ao anaty lahatahiry manokana. Avy eo ny lalana mankany amin'ity lahatahiry ity dia tsy maintsy ampidirina ao amin'ny $ env: Path sy $ env: JAVA_HOME variables amin'ny rafitra fiasa Windows:

Mpinamana amin'ny ELK sy Exchange izahay. Fizarana 2

Mpinamana amin'ny ELK sy Exchange izahay. Fizarana 2

Andeha hojerentsika ny version 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)

Fametrahana sy fanamboarana ny fonosana Logstash

Ampidino ny rakitra arisiva miaraka amin'ny fizarana Logstash avy eto. Ny arisiva dia tsy maintsy avoaka amin'ny fototry ny kapila. Esory amin'ny folder C:Program Files Tsy mendrika izany, Logstash dia mandΓ  ny hanomboka ara-dalΓ na. Avy eo dia mila miditra amin'ny rakitra ianao jvm.options fanamboarana tompon'andraikitra amin'ny fanomezana RAM ho an'ny fizotry ny Java. Manoro hevitra aho hamaritra ny antsasaky ny RAM an'ny mpizara. Raha manana 16 GB an'ny RAM ao anaty sambo izy dia ny fanalahidy default dia:

-Xms1g
-Xmx1g

tsy maintsy soloina:

-Xms8g
-Xmx8g

Ankoatra izany, dia tsara ny maneho hevitra ny andalana -XX:+UseConcMarkSweepGC. More momba izany eto. Ny dingana manaraka dia ny mamorona config default amin'ny rakitra logstash.conf:

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

Miaraka amin'io fanamafisana io, mamaky angon-drakitra avy amin'ny console i Logstash, mandalo izany amin'ny sivana tsy misy na inona na inona, ary mamerina izany any amin'ny console. Ny fampiasana an'io fanamafisana io dia hizaha toetra ny fiasan'ny Logstash. Mba hanaovana izany, andeha hatao amin'ny fomba interactive izany:

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}

Natomboka soa aman-tsara tamin'ny seranana 9600 ny Logstash.

Ny dingana fametrahana farany: manomboka ny Logstash ho serivisy Windows. Azo atao izany, ohatra, amin'ny fampiasana ny fonosana NSSM:

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

fandeferana fahadisoana

Ny fiarovana ny logs rehefa afindra avy amin'ny lohamilina loharano dia azo antoka amin'ny mekanika Persistent Queues.

Ahoana ny fomba fiasany

Ny filaharan'ny filaharana mandritra ny fanodinana dia: fampidirana β†’ filaharana β†’ sivana + vokatra.

Ny plugin fampidirana dia mandray angon-drakitra avy amin'ny loharano iray, manoratra izany amin'ny filaharana ary mandefa fanamafisana fa voaray any amin'ny loharano ny data.

Ny hafatra avy amin'ny filaharana dia nokarakarain'ny Logstash, nandalo tamin'ny sivana sy ny plugin output. Rehefa mahazo fanamafisana avy amin'ny vokatra fa nalefa ny log, dia esorin'i Logstash ny lozisialy voavoatra amin'ny filaharana. Raha mijanona ny Logstash, dia mijanona ao anaty filaharana ny hafatra sy hafatra tsy voavolavola rehetra izay tsy nisy fanamafisana voaray, ary ny Logstash dia hanohy hikarakara azy ireo amin'ny fotoana manaraka.

fanitsiana

Adjustable amin'ny fanalahidin'ny rakitra C:Logstashconfiglogstash.yml:

  • queue.type: (soatoavina azo atao - persisted ΠΈ memory (default)).
  • path.queue: (lalana mankany amin'ny lahatahiry misy rakitra filaharana, izay voatahiry ao amin'ny C:Logstashqueue raha default).
  • queue.page_capacity: (haben'ny pejy filaharana faratampony, 64mb ny sandan'ny default).
  • queue.drain: (marina/diso - mamela/manakana ny fijanonan'ny filaharana alohan'ny hanakatonana ny Logstash. Tsy manoro hevitra aho ny hamela izany, satria hisy fiantraikany mivantana amin'ny hafainganam-pandehan'ny fanakatonana ny server izany).
  • queue.max_events: (Isan'ny hetsika ambony indrindra amin'ny filaharana, ny default dia 0 (tsy voafetra)).
  • queue.max_bytes: (habe filaharana ambony indrindra amin'ny bytes, default - 1024mb (1gb)).

Raha namboarina queue.max_events ΠΈ queue.max_bytes, dia mijanona ho ekena ao amin'ny filaharana ny hafatra rehefa tratra ny sandan'ny iray amin'ireo fanovana ireo. Mianara bebe kokoa momba ny filaharana maharitra eto.

Ohatra iray amin'ny ampahany amin'ny logstash.yml tompon'andraikitra amin'ny fametrahana ny filaharana:

queue.type: persisted
queue.max_bytes: 10gb

fanitsiana

Ny fandrindrana Logstash matetika dia misy ampahany telo, tompon'andraikitra amin'ny dingana samihafa amin'ny fanodinana ny logs ho avy: fandraisana (fizarana fampidirana), parsing (fizarana sivana) ary fandefasana any amin'ny Elastic (fizarana famoahana). Eto ambany dia hojerentsika akaiky ny tsirairay amin'izy ireo.

fahan'ny

Mandray ny renirano miditra miaraka amin'ny log manta avy amin'ireo mpiasan'ny filebeat izahay. Ity plugin ity no asehontsika ao amin'ny fizarana fampidirana:

input {
  beats {
    port => 5044
  }
}

Aorian'io fanamafisana io dia manomboka mihaino ny seranan-tsambo 5044 i Logstash, ary rehefa mahazo logs, dia manodina azy ireo araka ny firafitry ny fizarana sivana. Raha ilaina dia azonao atao ny mamatotra ny fantsona handraisana logs avy amin'ny filebit amin'ny SSL. Vakio bebe kokoa momba ny firafitry ny plugin beats eto.

Filter

Ny diarin-tsoratra rehetra mahaliana amin'ny fanodinana izay ateraky ny Exchange dia amin'ny endrika csv miaraka amin'ireo saha voalaza ao amin'ny rakitra log. Ho an'ny firaketana csv, Logstash dia manolotra plugins telo: fongotra noho, csv sy grok. Ny voalohany no be indrindra fifadian-kanina, fa tsy mahazaka afa-tsy ny logs tsotra indrindra.
Ohatra, hozarainy ho roa ity rakitsoratra manaraka ity (noho ny fisian'ny faingo ao anatin'ny saha), ka izany no mahatonga ny dia ho diso hevitra:

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

Azo ampiasaina izy io rehefa manadihady logs, ohatra, IIS. Amin'ity tranga ity, ny fizarana sivana dia mety ho toy izao:

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

Ny fanamafisana logstash dia ahafahanao mampiasa fanambarana misy fepetra, noho izany dia afaka mandefa log izay nasiana marika miaraka amin'ny tag filebeat mankany amin'ny plugin dissect izahay IIS. Ao anatin'ilay plugin dia mifanandrify amin'ny sandan'ny saha miaraka amin'ny anarany, mamafa ny saha tany am-boalohany message, izay misy fidirana avy amin'ny log, ary afaka manampy saha mahazatra izay, ohatra, misy ny anaran'ny rindranasa izay anangonantsika diary.

Amin'ny tranga fanaraha-maso dia tsara kokoa ny mampiasa ny csv plugin; afaka mandrindra tsara ny saha sarotra:

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

Ao anatin'ilay plugin dia mifanandrify amin'ny sandan'ny saha miaraka amin'ny anarany, mamafa ny saha tany am-boalohany message (ary koa ny saha tenant-id ΠΈ schema-version), izay misy fidirana avy amin'ny log, ary afaka manampy saha mahazatra isika, izay, ohatra, misy ny anaran'ny rindranasa izay anangonantsika logs.

Eo am-pivoahana amin'ny dingana fanivanana, dia hahazo antontan-taratasy amin'ny tombantombana voalohany isika, vonona ho an'ny sary ao Kibana. Tsy ho hitantsika ireto manaraka ireto:

  • Ny saha isa dia ho fantatra ho lahatsoratra, izay manakana ny fandidiana azy. Izany hoe, ny saha time-taken IIS log, ary koa ny saha recipient-count ΠΈ total-bites Log Tracking.
  • Ny mari-pamantarana ara-potoanan'ny antontan-taratasy mahazatra dia ahitana ny fotoana nanaovana ny diary, fa tsy ny fotoana nanoratana azy teo amin'ny lafiny server.
  • saha recipient-address dia ho toy ny toerana fanorenana iray, izay tsy mamela ny fanadihadiana hanisa ny mpandray ny taratasy.

Fotoana izao hanampiana ody kely amin'ny fizotran'ny fanodinana log.

Manova saha isa

Ny plugin dissect dia manana safidy convert_datatype, izay azo ampiasaina hamadika saha lahatsoratra ho endrika nomerika. Ohatra, toy izao:

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

Tsara ny mitadidy fa ity fomba ity dia mety raha tsy misy kofehy ny saha. Ny safidy dia tsy manodina ny soatoavina Null avy amin'ny saha ary manipy fanavahana.

Ho an'ny fanaraha-maso logs, tsara kokoa ny tsy mampiasa fomba niova fo mitovy, satria ny saha recipient-count ΠΈ total-bites mety ho foana. Raha hanova ireo sehatra ireo dia tsara kokoa ny mampiasa plugin mutate:

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

Fizarana adiresin'ny mpandray ho lasa mpandray tsirairay

Ity olana ity dia azo vahana ihany koa amin'ny fampiasana ny plugin mutate:

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

Fanovana ny mari-pamantarana

Raha ny momba ny fanaraha-maso ny log, ny olana dia tena mora voavaha amin'ny plugin daty, izay hanampy anao hanoratra eny an-tsaha timestamp daty sy ora amin'ny endrika takiana avy amin'ny saha date-time:

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

Raha ny logs IIS dia mila manambatra ny angona an-tsaha isika date ΠΈ time amin'ny fampiasana ny plugin mutate, soraty ny faritry ny ora ilaintsika ary apetraho ao anatin'io marika io timestamp mampiasa ny plugin daty:

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

Fivoahana

Ny fizarana vokatra dia ampiasaina handefasana logs efa voavoatra any amin'ny mpandray log. Raha ny fandefasana mivantana amin'ny Elastic dia misy plugin iray ampiasaina electeur, izay mamaritra ny adiresin'ny mpizara sy ny mΓ΄dely anarana fanondro handefasana ny antontan-taratasy novokarina:

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

Fanofanana farany

Ny fanovana farany dia ho toy izao:

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

Rohy mahasoa:

Source: www.habr.com

Add a comment