Fluentd: Kini idi ti o ṣe pataki lati tunto ifipamọ iṣelọpọ

Fluentd: Kini idi ti o ṣe pataki lati tunto ifipamọ iṣelọpọ

Ni ode oni, ko ṣee ṣe lati fojuinu iṣẹ akanṣe orisun Kubernetes laisi akopọ ELK, eyiti o ṣafipamọ awọn akọọlẹ ti awọn ohun elo mejeeji ati awọn paati eto ti iṣupọ naa. Ninu iṣe wa, a lo akopọ EFK pẹlu Fluentd dipo Logstash.

Fluentd jẹ igbalode, agbowọgba log agbaye ti o ni olokiki siwaju ati siwaju sii ati pe o ti darapọ mọ Cloud Native Computing Foundation, eyiti o jẹ idi ti idagbasoke idagbasoke rẹ ti dojukọ lilo ni apapo pẹlu Kubernetes.

Otitọ ti lilo Fluentd dipo Logstash ko yi ipilẹ gbogbogbo ti package sọfitiwia naa pada, sibẹsibẹ, Fluentd jẹ ijuwe nipasẹ awọn nuances pato tirẹ ti o waye lati isọdi rẹ.

Fun apẹẹrẹ, nigba ti a bẹrẹ lilo EFK ni iṣẹ akanṣe ti o nšišẹ pẹlu kikankikan giga ti gedu, a koju pẹlu otitọ pe ni Kibana diẹ ninu awọn ifiranṣẹ ti han leralera ni ọpọlọpọ igba. Ninu nkan yii a yoo sọ fun ọ idi ti iṣẹlẹ yii waye ati bii o ṣe le yanju iṣoro naa.

Iṣoro ti ẹda-iwe

Ninu awọn iṣẹ akanṣe wa, Fluentd ti wa ni ransogun bi DaemonSet kan (ti ṣe ifilọlẹ ni adaṣe ni apẹẹrẹ kan lori ipade kọọkan ti iṣupọ Kubernetes) ati ṣe abojuto awọn igbasilẹ apoti stdout ni /var/log/containers. Lẹhin gbigba ati sisẹ, awọn akọọlẹ ni irisi awọn iwe aṣẹ JSON ni a firanṣẹ si ElasticSearch, ti a gbe dide ni iṣupọ tabi fọọmu imurasilẹ, da lori iwọn ti iṣẹ akanṣe ati awọn ibeere fun iṣẹ ati ifarada aṣiṣe. Kibana jẹ lilo bi wiwo ayaworan.

Nigbati o ba nlo Fluentd pẹlu ohun itanna ifisilẹ iṣelọpọ, a pade ipo kan nibiti diẹ ninu awọn iwe aṣẹ ni ElasticSearch ni akoonu kanna ni deede ati iyatọ nikan ni idamọ. O le rii daju pe eyi jẹ atunwi ifiranṣẹ nipa lilo akọọlẹ Nginx gẹgẹbi apẹẹrẹ. Ninu faili log, ifiranṣẹ yii wa ninu ẹda kan:

127.0.0.1 192.168.0.1 - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0" -

Sibẹsibẹ, awọn iwe aṣẹ pupọ wa ninu ElasticSearch ti o ni ifiranṣẹ yii ninu:

{
  "_index": "test-custom-prod-example-2020.01.02",
  "_type": "_doc",
  "_id": "HgGl_nIBR8C-2_33RlQV",
  "_version": 1,
  "_score": 0,
  "_source": {
    "service": "test-custom-prod-example",
    "container_name": "nginx",
    "namespace": "test-prod",
    "@timestamp": "2020-01-14T05:29:47.599052886 00:00",
    "log": "127.0.0.1 192.168.0.1 - [28/Feb/2013:12:00:00  0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0" -",
    "tag": "custom-log"
  }
}

{
  "_index": "test-custom-prod-example-2020.01.02",
  "_type": "_doc",
  "_id": "IgGm_nIBR8C-2_33e2ST",
  "_version": 1,
  "_score": 0,
  "_source": {
    "service": "test-custom-prod-example",
    "container_name": "nginx",
    "namespace": "test-prod",
    "@timestamp": "2020-01-14T05:29:47.599052886 00:00",
    "log": "127.0.0.1 192.168.0.1 - [28/Feb/2013:12:00:00  0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0" -",
    "tag": "custom-log"
  }
}

Pẹlupẹlu, o le jẹ diẹ sii ju awọn atunwi meji lọ.

Lakoko ti o n ṣatunṣe iṣoro yii ni awọn iwe Fluentd, o le rii nọmba nla ti awọn ikilọ pẹlu akoonu atẹle:

2020-01-16 01:46:46 +0000 [warn]: [test-prod] failed to flush the buffer. retry_time=4 next_retry_seconds=2020-01-16 01:46:53 +0000 chunk="59c37fc3fb320608692c352802b973ce" error_class=Fluent::Plugin::ElasticsearchOutput::RecoverableRequestFailure error="could not push logs to Elasticsearch cluster ({:host=>"elasticsearch", :port=>9200, :scheme=>"http", :user=>"elastic", :password=>"obfuscated"}): read timeout reached"

Awọn ikilọ wọnyi waye nigbati ElasticSearch ko le da esi pada si ibeere kan laarin akoko ti a sọ nipa paramita request_timeout, eyiti o jẹ idi ti ajẹkù ifipamọ ti a firanṣẹ siwaju ko le ṣe imukuro. Lẹhin eyi, Fluentd gbiyanju lati firanṣẹ awọn ajeku ifipamọ si ElasticSearch lẹẹkansi ati lẹhin nọmba lainidii ti awọn igbiyanju, iṣẹ naa pari ni aṣeyọri:

2020-01-16 01:47:05 +0000 [warn]: [test-prod] retry succeeded. chunk_id="59c37fc3fb320608692c352802b973ce" 
2020-01-16 01:47:05 +0000 [warn]: [test-prod] retry succeeded. chunk_id="59c37fad241ab300518b936e27200747" 
2020-01-16 01:47:05 +0000 [warn]: [test-dev] retry succeeded. chunk_id="59c37fc11f7ab707ca5de72a88321cc2" 
2020-01-16 01:47:05 +0000 [warn]: [test-dev] retry succeeded. chunk_id="59c37fb5adb70c06e649d8c108318c9b" 
2020-01-16 01:47:15 +0000 [warn]: [kube-system] retry succeeded. chunk_id="59c37f63a9046e6dff7e9987729be66f"

Bibẹẹkọ, ElasticSearch tọju ọkọọkan awọn ajẹkù ifipamọ gbigbe bi alailẹgbẹ o si fi wọn sọtọ awọn iye aaye _id alailẹgbẹ lakoko titọka. Eyi ni bi awọn ẹda ti awọn ifiranṣẹ ṣe han.

Ni Kibana o dabi eleyi:

Fluentd: Kini idi ti o ṣe pataki lati tunto ifipamọ iṣelọpọ

Ojutu si iṣoro naa

Awọn aṣayan pupọ wa lati yanju iṣoro yii. Ọkan ninu wọn ni ẹrọ ti a ṣe sinu ohun itanna fluent-plugin-elasticsearch fun ṣiṣẹda hash alailẹgbẹ fun iwe kọọkan. Ti o ba lo ẹrọ yii, ElasticSearch yoo ṣe idanimọ awọn atunwi ni ipele fifiranṣẹ ati ṣe idiwọ awọn iwe aṣẹ ẹda-iwe. Ṣugbọn a gbọdọ ṣe akiyesi pe ọna yii ti yanju iṣoro naa n gbiyanju pẹlu iwadii naa ati pe ko ṣe imukuro aṣiṣe pẹlu aini akoko, nitorinaa a kọ lilo rẹ silẹ.

A lo ohun itanna buffering lori iṣẹjade Fluentd lati ṣe idiwọ pipadanu log ni iṣẹlẹ ti awọn iṣoro nẹtiwọọki igba kukuru tabi kikankikan gedu. Ti o ba jẹ fun idi kan ElasticSearch ko le kọ iwe kan lẹsẹkẹsẹ si atọka, iwe naa ti wa ni ila ati fipamọ sori disiki. Nitorinaa, ninu ọran wa, lati le yọ orisun ti iṣoro naa ti o yori si aṣiṣe ti a ṣalaye loke, o jẹ dandan lati ṣeto awọn iye to pe fun awọn aye ifipamọ, ninu eyiti ifipamọ iṣelọpọ Fluentd yoo jẹ iwọn to ati ni akoko kanna ṣakoso awọn lati wa ni nso ninu awọn pín akoko.

O tọ lati ṣe akiyesi pe awọn iye ti awọn paramita ti a sọrọ ni isalẹ jẹ ẹni kọọkan ni ọran kọọkan pato ti lilo buffering ni awọn afikun iṣelọpọ, bi wọn ṣe dale lori ọpọlọpọ awọn ifosiwewe: kikankikan ti kikọ awọn ifiranṣẹ si log nipasẹ awọn iṣẹ, ṣiṣe eto disiki, nẹtiwọọki fifuye ikanni ati bandiwidi rẹ. Nitorinaa, lati le gba awọn eto ifipamọ ti o dara fun ọran kọọkan, ṣugbọn kii ṣe laiṣe, yago fun awọn wiwa gigun ni afọju, o le lo alaye n ṣatunṣe aṣiṣe ti Fluentd kowe si akọọlẹ rẹ lakoko iṣẹ ati ni iyara gba awọn iye to pe.

Ni akoko ti iṣoro naa ti gbasilẹ, iṣeto naa dabi eyi:

 <buffer>
        @type file
        path /var/log/fluentd-buffers/kubernetes.test.buffer
        flush_mode interval
        retry_type exponential_backoff
        flush_thread_count 2
        flush_interval 5s
        retry_forever
        retry_max_interval 30
        chunk_limit_size 8M
        queue_limit_length 8
        overflow_action block
      </buffer>

Nigbati o ba yanju iṣoro naa, awọn iye ti awọn paramita wọnyi ni a yan pẹlu ọwọ:
chunk_limit_size — iwọn awọn chunks sinu eyiti awọn ifiranṣẹ ti o wa ninu ifipamọ ti pin.

  • flush_interval — aarin akoko lẹhin eyi ti ifipamọ ti wa ni nso.
  • queue_limit_length — awọn ti o pọju nọmba ti chunks ninu awọn ti isinyi.
  • request_timeout jẹ akoko fun eyiti asopọ laarin Fluentd ati ElasticSearch ti fi idi mulẹ.

Iwọn ifipamọ lapapọ le ṣe iṣiro nipasẹ isodipupo awọn paramita queue_limit_length ati chunk_limit_size, eyiti o le tumọ bi “nọmba ti o pọ julọ ti awọn chunks ninu isinyi, ọkọọkan eyiti o ni iwọn ti a fun.” Ti iwọn ifipamọ ko ba to, ikilọ atẹle yoo han ninu awọn akọọlẹ:

2020-01-21 10:22:57 +0000 [warn]: [test-prod] failed to write data into buffer by buffer overflow action=:block

O tumọ si pe ifipamọ ko ni akoko lati yọkuro ni akoko ti o pin ati pe data ti o wọ inu ifipamọ ni kikun ti dina, eyiti yoo yorisi isonu ti apakan awọn akọọlẹ.

O le mu ifipamọ pọ si ni awọn ọna meji: nipa jijẹ boya iwọn ti chunk kọọkan ninu isinyi, tabi nọmba awọn chunks ti o le wa ninu isinyi.

Ti o ba ṣeto iwọn chunk chunk_limit_size si diẹ sii ju megabyte 32, lẹhinna ElasticSeacrh kii yoo gba, nitori apo ti nwọle yoo tobi ju. Nitorina, ti o ba nilo lati mu ifipamọ naa pọ si siwaju sii, o dara lati mu iwọn gigun ti o pọju sii queue_limit_length.

Nigbati ifipamọ ba da ṣikun omi duro ati pe akoko ti ko to nikan ni o ku, o le bẹrẹ jijẹ paramita request_timeout. Bibẹẹkọ, ti o ba ṣeto iye si diẹ sii ju iṣẹju-aaya 20, awọn ikilọ atẹle yoo bẹrẹ lati han ninu awọn akọọlẹ Fluentd:

2020-01-21 09:55:33 +0000 [warn]: [test-dev] buffer flush took longer time than slow_flush_log_threshold: elapsed_time=20.85753920301795 slow_flush_log_threshold=20.0 plugin_id="postgresql-dev" 

Ifiranṣẹ yii ko ni ipa lori iṣẹ ti eto naa ni ọna eyikeyi ati pe o tumọ si pe akoko fifọ ifipamọ gba to gun ju ti a ṣeto nipasẹ paramita slow_flush_log_threshold. Eyi n ṣatunṣe alaye ati pe a lo nigbati o ba yan iye ti paramita request_timeout.

Aṣayan algorithm gbogbogbo jẹ bi atẹle:

  1. Ṣeto request_timeout si iye ti o ni iṣeduro lati tobi ju iwulo lọ (awọn ọgọọgọrun awọn aaya). Lakoko iṣeto, ami pataki fun eto to pe ti paramita yii yoo jẹ piparẹ awọn ikilọ fun aini akoko ipari.
  2. Duro fun awọn ifiranse nipa rékọjá ọ̀nà àbáwọlé slow_flush_log_threshold. Ọrọ ikilọ ni aaye ti o kọja_akoko yoo ṣafihan akoko gidi ti ifipamọ naa ti nso.
  3. Ṣeto request_timeout si iye ti o tobi ju iye akoko ti o pọju ti o gba lakoko akoko akiyesi. A ṣe iṣiro iye ibeere_akoko bi akoko ti kọja + 50%.
  4. Lati yọ awọn ikilọ kuro nipa awọn ṣiṣan ifipamọ gigun lati akọọlẹ, o le gbe iye ti slow_flush_log_threshold soke. A ṣe iṣiro iye yii bi o ti kọja_akoko + 25%.

Awọn iye ikẹhin ti awọn aye wọnyi, bi a ti ṣe akiyesi tẹlẹ, ni a gba ni ẹyọkan fun ọran kọọkan. Nipa titẹle algorithm ti o wa loke, a ni iṣeduro lati yọkuro aṣiṣe ti o yori si awọn ifiranṣẹ ti o tun ṣe.

Tabili ti o wa ni isalẹ fihan bii nọmba awọn aṣiṣe fun ọjọ kan, ti o yori si pipọ ti awọn ifiranṣẹ, awọn ayipada ninu ilana yiyan awọn iye ti awọn aye ti a ṣalaye loke:

ipade-1
ipade-2
ipade-3
ipade-4

Ṣaaju lẹhin
Ṣaaju lẹhin
Ṣaaju lẹhin
Ṣaaju lẹhin

kuna lati fọ ifipamọ
1749/2
694/2
47/0
1121/2

tun gbiyanju
410/2
205/1
24/0
241/2

O tọ lati ṣe akiyesi ni afikun pe awọn eto abajade le padanu ibaramu wọn bi iṣẹ akanṣe ti n dagba ati, ni ibamu, nọmba awọn akọọlẹ pọ si. Àmì àkọ́kọ́ ti àkókò tí kò tó ni ìpadàbọ̀ àwọn ìfiránṣẹ́ nípa dídánù ìfipamọ́ gígùn kan sí àkọọ́lẹ̀ Fluentd, ìyẹn ni, tí ó kọjá ìwọ̀n ọ̀nà ìwọ̀n ọ̀nà slow_flush_log_threshold. Lati aaye yii siwaju, ala kekere tun wa ṣaaju paramita request_timeout ti kọja, nitorinaa o jẹ dandan lati dahun si awọn ifiranṣẹ wọnyi ni ọna ti akoko ati tun ilana yiyan awọn eto to dara julọ ti salaye loke.

ipari

Ṣiṣatunṣe ti o dara ni ifipamọ iṣelọpọ Fluentd jẹ ọkan ninu awọn ipele akọkọ ti atunto akopọ EFK, ṣiṣe ipinnu iduroṣinṣin ti iṣẹ rẹ ati gbigbe awọn iwe aṣẹ to pe ni awọn atọka. Da lori algorithm iṣeto ti a ti ṣalaye, o le ni idaniloju pe gbogbo awọn akọọlẹ ni yoo kọ si atọka ElasticSearch ni ilana to tọ, laisi awọn atunwi tabi awọn adanu.

Tun ka awọn nkan miiran lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun