අපි ELK සහ Exchange සමඟ මිතුරන් වෙමු. 2 කොටස

අපි ELK සහ Exchange සමඟ මිතුරන් වෙමු. 2 කොටස

මිතුරන් හුවමාරු කර ගන්නා ආකාරය සහ ELK (ආරම්භය) පිළිබඳ මගේ කතාව මම දිගටම කරගෙන යන්නෙමි මෙහි) මෙම සංයෝජනය පැකිලීමකින් තොරව ඉතා විශාල ලඝු-සටහන් ප්‍රමාණයක් සැකසීමට සමත් බව මම ඔබට මතක් කරමි. අපි මෙවර කතා කරන්නේ Logstash සහ Kibana සංරචක සමඟ Exchange වැඩ කර ගන්නේ කෙසේද යන්න පිළිබඳවයි.

ELK තොගයේ ලොග්ස්ටෑෂ් ලොග් බුද්ධිමත්ව සැකසීමට සහ ලේඛන ආකාරයෙන් ඉලාස්ටික් තුළ ස්ථානගත කිරීම සඳහා සූදානම් කිරීමට භාවිතා කරයි, එහි පදනම මත කිබානා හි විවිධ දෘශ්‍යකරණයන් තැනීමට පහසුය.

ස්ථාපනය

අදියර දෙකකින් සමන්විත වේ:

  • OpenJDK පැකේජය ස්ථාපනය කිරීම සහ වින්‍යාස කිරීම.
  • Logstash පැකේජය ස්ථාපනය කිරීම සහ වින්‍යාස කිරීම.

OpenJDK පැකේජය ස්ථාපනය කිරීම සහ වින්‍යාස කිරීම

OpenJDK පැකේජය බාගත කර විශේෂිත නාමාවලියකට ඉවත් කළ යුතුය. එවිට මෙම ඩිරෙක්ටරියට යන මාර්ගය Windows මෙහෙයුම් පද්ධතියේ $env:Path සහ $env:JAVA_HOME විචල්‍යයන් තුලට ඇතුලත් කල යුතුය.

අපි ELK සහ Exchange සමඟ මිතුරන් වෙමු. 2 කොටස

අපි ELK සහ Exchange සමඟ මිතුරන් වෙමු. 2 කොටස

අපි ජාවා අනුවාදය පරීක්ෂා කරමු:

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)

Logstash පැකේජය ස්ථාපනය කිරීම සහ වින්‍යාස කිරීම

Logstash බෙදාහැරීම සමඟ සංරක්ෂිත ගොනුව බාගන්න මෙතනින්. සංරක්ෂිතය තැටියේ මූලයට ඉවත් කළ යුතුය. ෆෝල්ඩරයට අසුරන්න C:Program Files එය වටින්නේ නැත, ලොග්ස්ටාෂ් සාමාන්යයෙන් ආරම්භ කිරීම ප්රතික්ෂේප කරනු ඇත. එවිට ඔබ ගොනුවට ඇතුල් විය යුතුය jvm.options ජාවා ක්‍රියාවලිය සඳහා RAM වෙන් කිරීමේ වගකීම නිවැරදි කරයි. සේවාදායකයේ RAM වලින් අඩක් සඳහන් කිරීමට මම නිර්දේශ කරමි. එහි 16 GB RAM ප්‍රමාණයක් තිබේ නම්, පෙරනිමි යතුරු වනුයේ:

-Xms1g
-Xmx1g

සමඟ ප්රතිස්ථාපනය කළ යුතුය:

-Xms8g
-Xmx8g

ඊට අමතරව, රේඛාව ගැන අදහස් දැක්වීම සුදුසුය -XX:+UseConcMarkSweepGC. මේ ගැන වැඩි විස්තර මෙහි. මීලඟ පියවර වන්නේ logstash.conf ගොනුවේ පෙරනිමි වින්‍යාසයක් සෑදීමයි:

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

මෙම වින්‍යාසය සමඟ, Logstash කොන්සෝලයෙන් දත්ත කියවයි, හිස් පෙරහනක් හරහා ගොස් එය නැවත කොන්සෝලය වෙත ප්‍රතිදානය කරයි. මෙම වින්‍යාසය භාවිතා කිරීමෙන් Logstash හි ක්‍රියාකාරීත්වය පරීක්ෂා කරනු ඇත. මෙය සිදු කිරීම සඳහා, අපි එය අන්තර් ක්රියාකාරී ආකාරයෙන් ධාවනය කරමු:

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 වරාය 9600 මත සාර්ථකව දියත් කරන ලදී.

අවසාන ස්ථාපන පියවර: Windows සේවාවක් ලෙස Logstash දියත් කරන්න. උදාහරණයක් ලෙස, පැකේජය භාවිතයෙන් මෙය කළ හැකිය එන්එස්එස්එම්:

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

වැරදි ඉවසීම

මූලාශ්‍ර සේවාදායකයෙන් මාරු කිරීමේදී ලඝු-සටහන් වල ආරක්ෂාව ස්ථිර පෝලිම් යාන්ත්‍රණය මගින් සහතික කෙරේ.

එය ක්රියාත්මක වන්නේ කෙසේද?

ලොග් සැකසීමේදී පෝලිම්වල පිරිසැලසුම: ආදානය → පෝලිම → පෙරහන + ප්‍රතිදානය.

ආදාන ප්ලගිනය ලොග් මූලාශ්‍රයකින් දත්ත ලබා ගනී, එය පෝලිමකට ලියයි, සහ දත්ත මූලාශ්‍රය වෙත ලැබී ඇති බවට තහවුරු කිරීමක් යවයි.

පෝලිමේ පණිවිඩ Logstash මගින් සකසනු ලැබේ, පෙරහන සහ ප්රතිදාන ප්ලගිනය හරහා ගමන් කරයි. ලොගය යවා ඇති බවට ප්‍රතිදානයෙන් තහවුරු කිරීමක් ලැබෙන විට, Logstash විසින් සැකසූ ලොගය පෝලිමෙන් ඉවත් කරයි. Logstash නැවැත්වූයේ නම්, තහවුරු කිරීමක් නොලැබුණු සියලුම සකස් නොකළ පණිවිඩ සහ පණිවිඩ පෝලිමේ පවතින අතර, Logstash එය ආරම්භ වන විට ඒවා දිගටම සකසනු ඇත.

ගැලපුම්

ගොනුවේ යතුරු මගින් සකස් කළ හැක C:Logstashconfiglogstash.yml:

  • queue.type: (හැකි අගයන් - persisted и memory (default)).
  • path.queue: (පෙරනිමියෙන් C:Logstashqueue හි ගබඩා කර ඇති පෝලිම් ගොනු සහිත ෆෝල්ඩරය වෙත යන මාර්ගය).
  • queue.page_capacity: (උපරිම පෝලිම් පිටු ප්‍රමාණය, පෙරනිමි අගය 64mb වේ).
  • queue.drain: (සත්‍ය/අසත්‍යය - Logstash වසා දැමීමට පෙර පෝලිම් සැකසීම නැවැත්වීම සක්‍රීය කරයි/අබල කරයි. මම එය සක්‍රීය කිරීම නිර්දේශ නොකරමි, මන්ද මෙය සේවාදායකය වසා දැමීමේ වේගයට සෘජුවම බලපානු ඇත).
  • queue.max_events: (පෝලිමේ ඇති උපරිම සිදුවීම් ගණන, පෙරනිමිය 0 (අසීමිත)).
  • queue.max_bytes: (උපරිම පෝලිම් ප්‍රමාණය බයිට් වලින්, පෙරනිමිය - 1024mb (1gb)).

වින්‍යාස කර ඇත්නම් queue.max_events и queue.max_bytes, පසුව මෙම ඕනෑම සිටුවමක අගය ළඟා වූ විට පණිවිඩ පෝලිමට පිළිගැනීම නතර වේ. ස්ථීර පෝලිම් ගැන තව දැනගන්න මෙහි.

පෝලිම සැකසීම සඳහා වගකිව යුතු logstash.yml කොටසෙහි උදාහරණයක්:

queue.type: persisted
queue.max_bytes: 10gb

ගැලපුම්

Logstash වින්‍යාසය සාමාන්‍යයෙන් කොටස් තුනකින් සමන්විත වන අතර, ලැබෙන ලඝු-සටහන් සැකසීමේ විවිධ අවධීන් සඳහා වගකිව යුතු ය: ලැබීම (ආදාන කොටස), විග්‍රහ කිරීම (පෙරහන කොටස) සහ ඉලාස්ටික් වෙත යැවීම (ප්‍රතිදාන කොටස). පහත අපි ඒ එක් එක් දෙස සමීපව බලමු.

ආදාන

ගොනු බීට් නියෝජිතයන්ගෙන් අමු ලඝු-සටහන් සහිත එන ප්‍රවාහය අපට ලැබේ. ආදාන කොටසේ අපි දක්වන්නේ මෙම ප්ලගිනයයි:

input {
  beats {
    port => 5044
  }
}

මෙම වින්‍යාසයෙන් පසුව, ලොග්ස්ටාෂ් 5044 වරායට සවන් දීමට පටන් ගන්නා අතර, ලොග් ලබා ගන්නා විට, පෙරහන් කොටසේ සැකසුම් අනුව ඒවා සකසයි. අවශ්‍ය නම්, ඔබට SSL හි filebit වෙතින් ලඝු-සටහන් ලබා ගැනීම සඳහා නාලිකාව ඔතා ගත හැක. බීට්ස් ප්ලගින සැකසුම් ගැන වැඩිදුර කියවන්න මෙහි.

පෙරහන

Exchange උත්පාදනය කරන සැකසුම් සඳහා රසවත් වන සියලුම පෙළ ලොග ලොග් ගොනුවේම විස්තර කර ඇති ක්ෂේත්‍ර සමඟ csv ආකෘතියෙන් ඇත. csv වාර්තා විග්‍රහ කිරීම සඳහා, Logstash අපට ප්ලගීන තුනක් ලබා දෙයි: වි ect ටනය කරන්න, csv සහ grok. පළමු එක තමයි වැඩිපුරම ඉක්මන්, නමුත් සරලම ලඝු-සටහන් පමණක් විග්‍රහ කිරීම සමඟ කටයුතු කරයි.
උදාහරණයක් ලෙස, එය පහත වාර්තාව දෙකට බෙදනු ඇත (ක්ෂේත්‍රය තුළ කොමාවක් තිබීම හේතුවෙන්), එම නිසා ලොගය වැරදි ලෙස විග්‍රහ කරනු ලැබේ:

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

ලඝු-සටහන් විග්‍රහ කිරීමේදී එය භාවිතා කළ හැක, උදාහරණයක් ලෙස, IIS. මෙම අවස්ථාවේදී, පෙරහන් කොටස මේ ආකාරයෙන් පෙනෙනු ඇත:

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

Logstash වින්‍යාසය ඔබට භාවිතා කිරීමට ඉඩ සලසයි කොන්දේසි සහිත ප්රකාශයන්, එබැවින් අපට ගොනු බීට් ටැගය සමඟ ටැග් කර ඇති ලඝු-සටහන් පමණක් dissect ප්ලගිනය වෙත යැවිය හැක. IIS. ප්ලගිනය තුළ අපි ක්ෂේත්‍ර අගයන් ඒවායේ නම් සමඟ ගැලපේ, මුල් ක්ෂේත්‍රය මකන්න message, ලොගයෙන් ඇතුළත් කිරීමක් අඩංගු වූ අතර, අපට අභිරුචි ක්ෂේත්‍රයක් එක් කළ හැකිය, උදාහරණයක් ලෙස, අප ලඝු එකතු කරන යෙදුමේ නම අඩංගු වේ.

ලොග් ලුහුබැඳීමේදී, csv ප්ලගිනය භාවිතා කිරීම වඩා හොඳය; එයට සංකීර්ණ ක්ෂේත්‍ර නිවැරදිව සැකසිය හැකිය:

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

ප්ලගිනය තුළ, අපි ක්ෂේත්‍ර අගයන් ඒවායේ නම් සමඟ ගැලපේ, මුල් ක්ෂේත්‍රය මකන්න message (සහ ක්ෂේත්ර tenant-id и schema-version), ලොගයෙන් ඇතුළත් කිරීමක් අඩංගු වූ අතර, අපට අභිරුචි ක්ෂේත්‍රයක් එක් කළ හැක, උදාහරණයක් ලෙස, අප ලඝු එකතු කරන යෙදුමේ නම එහි අඩංගු වේ.

පෙරීමේ අදියරෙන් පිටවීමේදී, කිබානා හි දෘශ්‍යකරණය සඳහා සූදානම්, පළමු ආසන්න වශයෙන් අපට ලේඛන ලැබෙනු ඇත. අපට පහත සඳහන් දේ මග හැරෙනු ඇත:

  • සංඛ්‍යාත්මක ක්ෂේත්‍ර පෙළ ලෙස හඳුනා ගනු ඇත, එමඟින් ඒවා මත ක්‍රියා කිරීම වළක්වයි. එනම්, ක්ෂේත්ර time-taken IIS ලොගය, මෙන්ම ක්ෂේත්‍ර recipient-count и total-bites ලොග් ලුහුබැඳීම.
  • සම්මත ලේඛන කාල මුද්‍රාවේ අඩංගු වන්නේ ලොගය සැකසූ කාලය මිස එය සේවාදායක පැත්තේ ලියා ඇති කාලය නොවේ.
  • ක්ෂේත්රයේ recipient-address ලිපි ලබන්නන් ගණනය කිරීමට විශ්ලේෂණයට ඉඩ නොදෙන එක් ඉදිකිරීම් අඩවියක් මෙන් පෙනෙනු ඇත.

ලොග් සැකසුම් ක්‍රියාවලියට කුඩා මැජික් එකතු කිරීමට කාලයයි.

සංඛ්‍යාත්මක ක්ෂේත්‍ර පරිවර්තනය කිරීම

dissect ප්ලගිනයට විකල්පයක් ඇත convert_datatype, පෙළ ක්ෂේත්‍රයක් ඩිජිටල් ආකෘතියකට පරිවර්තනය කිරීමට භාවිතා කළ හැක. උදාහරණයක් ලෙස, මේ වගේ:

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

මෙම ක්‍රමය සුදුසු වන්නේ ක්ෂේත්‍රයේ අනිවාර්යයෙන්ම නූලක් අඩංගු වන්නේ නම් පමණක් බව මතක තබා ගැනීම වටී. විකල්පය ක්ෂේත්‍ර වලින් ශුන්‍ය අගයන් සකසන්නේ නැති අතර ව්‍යතිරේකයක් විසි කරයි.

ලඝු-සටහන් ලුහුබැඳීම සඳහා, ක්ෂේත්‍ර නිසා සමාන පරිවර්තන ක්‍රමයක් භාවිතා නොකිරීම වඩා හොඳය recipient-count и total-bites හිස් විය හැක. මෙම ක්ෂේත්ර පරිවර්තනය කිරීම සඳහා ප්ලගිනයක් භාවිතා කිරීම වඩා හොඳය විකෘති කරන්න:

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

ලබන්නාගේ_ලිපිනය තනි ලබන්නන්ට බෙදීම

මෙම ගැටළුව විකෘති ප්ලගිනය භාවිතයෙන්ද විසඳිය හැක:

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

වේලා මුද්දරය වෙනස් කිරීම

ලොග් ලුහුබැඳීමේදී, ප්ලගිනය මඟින් ගැටළුව ඉතා පහසුවෙන් විසඳනු ලැබේ දිනය, ඔබට ක්ෂේත්රයේ ලිවීමට උපකාර වනු ඇත timestamp ක්ෂේත්‍රයෙන් අවශ්‍ය ආකෘතියෙන් දිනය සහ වේලාව date-time:

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

IIS ලොග වලදී, අපට ක්ෂේත්‍ර දත්ත ඒකාබද්ධ කිරීමට අවශ්‍ය වනු ඇත date и time විකෘති ප්ලගිනය භාවිතා කර, අපට අවශ්‍ය කාල කලාපය ලියාපදිංචි කර මෙම කාල මුද්‍රාව තබන්න timestamp දිනය ප්ලගිනය භාවිතා කරමින්:

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 {
  elasticsearch {
    hosts => ["127.0.0.1:9200", "127.0.0.2:9200"]
    manage_template => false
    index => "Exchange-%{+YYYY.MM.dd}"
  }
}

අවසාන වින්යාසය

අවසාන සැකසුම මේ ආකාරයෙන් පෙනෙනු ඇත:

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

ප්‍රයෝජනවත් සබැඳි:

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න