Fluentd: He aha te mea nui ki te whirihora i te papaa whakaputa

Fluentd: He aha te mea nui ki te whirihora i te papaa whakaputa

I tenei wa, kaore e taea te whakaaro i tetahi kaupapa-a-Kubernetes kaore he puranga ELK, e penapena ana i nga raarangi o nga tono me nga waahanga punaha o te roopu. I roto i a maatau mahi, ka whakamahia e matou te puranga EFK me Fluentd hei utu mo Logstash.

Ko Fluentd he kaikohi pororakau hou, ao katoa e rongonui haere ana, kua uru atu ki te Cloud Native Computing Foundation, na reira i aro atu ai tana vector whanaketanga ki te whakamahi tahi me Kubernetes.

Ko te meka o te whakamahi i te Fluentd hei utu mo te Logstash e kore e whakarereke i te tikanga whanui o te kete rorohiko, heoi, ko te Fluentd e tohuhia ana e ona ake ahuatanga motuhake i puta mai i tona kaha.

Hei tauira, i te wa i timata ai matou ki te whakamahi i te EFK i roto i tetahi kaupapa pukumahi me te tino kaha o te mahi takiuru, i pa ki a matou i Kibana i whakaatuhia etahi karere i nga wa maha. I roto i tenei tuhinga ka korero matou ki a koe he aha i puta ai tenei ahuatanga me pehea te whakaoti rapanga.

Ko te raruraru o te tāruarua tuhinga

I roto i a maatau kaupapa, ka tukuna a Fluentd hei DaemonSet (whakarewa aunoa i te waa kotahi ki ia node o te kahui Kubernetes) me te aro turuki i nga raarangi ipu stdout i /var/log/containers. I muri i te kohinga me te tukatuka, ka tukuna nga rakau i roto i te ahua o nga tuhinga JSON ki ElasticSearch, ka whakaarahia i roto i te kohinga, i te ahua motuhake ranei, i runga i te tauine o te kaupapa me nga whakaritenga mo te mahi me te aukati i te he. Ka whakamahia a Kibana hei atanga kauwhata.

I te wa e whakamahi ana i te Fluentd me te mono buffering putanga, i tutaki matou ki tetahi ahuatanga i rite tonu te ahua o etahi tuhinga i roto i te ElasticSearch me te rereke o te tohu tohu anake. Ka taea e koe te manatoko he korero tukurua tenei ma te whakamahi i te raarangi Nginx hei tauira. I roto i te kōnae rangitaki, kei roto tenei karere i te kape kotahi:

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

Heoi, he maha nga tuhinga kei ElasticSearch kei roto tenei karere:

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

I tua atu, neke atu i te rua nga tukurua.

I a koe e whakatika ana i tenei raru i roto i nga raarangi Fluentd, ka kite koe i te maha o nga whakatupato me nga mea e whai ake nei:

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"

Ka puta enei whakatupato i te wa e kore e taea e ElasticSearch te whakahoki i te whakautu ki tetahi tono i roto i te wa i tohua e te tawhā tono_timeout, na reira kaore e taea te whakawātea i te kongakonga parepare kua tukuna. Whai muri i tenei, ka ngana a Fluentd ki te tuku ano i te kongakonga parepare ki ElasticSearch, a, i muri i te maha o nga nganatanga, ka oti pai te mahi:

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"

Heoi, ko te ElasticSearch he mea ahurei ia o nga kongakonga parepare kua whakawhitia he mea motuhake ka whakawhiwhia ki a raatau nga uara mara _id i te wa o te tohu. Koinei te ahua o nga kape o nga karere ka puta.

Kei Kibana te ahua penei:

Fluentd: He aha te mea nui ki te whirihora i te papaa whakaputa

Nga raruraru

He maha nga whiringa hei whakaoti i tenei raru. Ko tetahi o enei ko te taputapu i hangaia ki roto i te mono-mono-elasticsearch mono mo te whakaputa i te hash ahurei mo ia tuhinga. Mena ka whakamahi koe i tenei tikanga, ka mohio a ElasticSearch i nga tukurua i te wa whakamua me te aukati i nga tuhinga taarua. Engari me whai whakaaro tatou ko tenei tikanga mo te whakaoti rapanga e uaua ana ki te whakatewhatewha me te kore e whakakore i te hapa me te kore o te waahi, na reira i whakarerea e matou te whakamahi.

Ka whakamahia e matou he mono-buffering i runga i te putanga Fluentd hei aukati i te ngaronga o te raarangi mena ka raru te whatunga mo te wa poto, ka piki ake ranei te kaha o te takiuru. Mena he take kaore e taea e ElasticSearch te tuhi i tetahi tuhinga ki te taurangi, ka tutiraa te tuhinga ka penapena ki runga i te kōpae. Na reira, i roto i ta maatau, ki te whakakore i te puna o te raru e arahi ana ki te hapa i whakaahuatia i runga ake nei, me whakarite nga uara tika mo nga tawhā aukati, i reira ka nui te rahi o te putunga putanga Fluentd me te i te wa ano whakahaere ki te whakawāteatia i roto i te wa i whakaritea.

He mea tika kia mohio ko nga uara o nga tawhā e korerohia ana i raro nei he takitahi i roto i ia keehi motuhake mo te whakamahi i te buffering i roto i nga taputapu whakaputa, na te mea e whakawhirinaki ana ki nga mea maha: te kaha o te tuhi i nga karere ki te raarangi ma nga ratonga, te mahinga o te punaha kōpae, te whatunga. te kawenga hongere me tona bandwidth. No reira, kia whiwhi ai koe i nga tautuhinga parepare e tika ana mo ia keehi takitahi, engari kaore i te nui, te karo i nga rapunga roa ma te matapo, ka taea e koe te whakamahi i nga korero patuiro ka tuhia e Fluentd ki tana raarangi i te wa e mahi ana me te tere tere ki te tiki i nga uara tika.

I te wa i tuhia te raruraru, ko te ahua o te whirihoranga penei:

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

I te whakaoti rapanga, ko nga uara o nga tawhā e whai ake nei i kowhiria ma te ringa:
chunk_limit_size — te rahi o nga moka ka wehewehea nga karere i roto i te parepare.

  • flush_interval — wā wā i muri nei ka whakawāteatia te parepare.
  • queue_limit_length — te tau mōrahi o ngā mongamonga i roto i te tūtira.
  • request_timeout ko te wa i whakaritea ai te hononga i waenga i a Fluentd me ElasticSearch.

Ka taea te tatau i te rahinga parepare ma te whakarea i nga tawhā queue_limit_length me te chunk_limit_size, ka taea te whakamaori hei "te maha morahi o nga wahanga i roto i te rarangi, kei ia tangata he rahinga kua whakaritea." Mena karekau te rahi o te parapara, ka puta te whakatupato e whai ake nei i roto i nga raarangi:

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

Ko te tikanga karekau he wa ki te whakakoi i roto i te waa kua whakaritea, ka aukatihia nga raraunga ka uru ki roto i te paanui katoa, ka arai i te ngaro o tetahi waahanga o nga raarangi.

Ka taea e koe te whakanui ake i te parapara i roto i nga huarahi e rua: ma te whakanui ake i te rahi o ia wahanga i roto i te rarangi, i te maha ranei o nga wahanga ka uru ki te rarangi.

Mena ka tautuhia e koe te rahi o te tiihi chunk_limit_size ki te neke atu i te 32 megabytes, karekau a ElasticSeacrh e whakaae, na te mea ka nui rawa te paatete taumai. No reira, ki te hiahia koe ki te whakanui ake i te parepare, he pai ake te whakanui ake i te morahi o te roanga o te tutirae_limit_length.

Ka mutu te puhaketanga o te kaitapa, ka toe ana te wa poto karekau te karere, ka taea e koe te timata ki te whakanui ake i te tawhā request_timeout. Heoi, ki te whakatauhia e koe te uara ki te neke atu i te 20 hēkona, ka timata nga whakatupato e whai ake nei ki te puta ki nga raarangi 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" 

Ko tenei karere karekau e pa ki te whakahaerenga o te punaha ahakoa he aha te tikanga he roa ake te wa whakamaaramatanga i te wa i whakaritea e te tawhā slow_flush_log_threshold. He korero patuiro tenei ka whakamahia e matou i te wa e whiriwhiri ana i te uara o te tawhā request_timeout.

Ko te algorithm whiriwhiri whaanui e whai ake nei:

  1. Tautuhia te wa roa tono ki te uara kua whakapumautia kia nui ake i te mea e tika ana (rau hekona). I te wa o te tatūnga, ko te paearu matua mo te tautuhinga tika o tenei tawhā ko te ngaro o nga whakatupato mo te kore o te waahi.
  2. Taria mo nga karere e pa ana ki te neke ake i te paepae_putanga_log_paepae. Ko te kupu whakatupato i te mara elapsed_time ka whakaatu i te wa tuturu i whakawāteatia te parepare.
  3. Whakatakotoria he uara_waa tono ki te uara nui ake i te nui o te uara o te wa kua hipa. Ka tatauhia e matou te uara tono_wāenga hei elapsed_time + 50%.
  4. Hei tango i nga whakatupato mo nga rewharewha roa mai i te raarangi, ka taea e koe te whakanui i te uara o slow_flush_log_threshold. Ka tatau tatou i tenei uara hei elapsed_time + 25%.

Ko nga uara whakamutunga o enei tawhā, pera i te korero i mua, ka whiwhi takitahi mo ia keehi. Ma te whai i te algorithm o runga ake nei, ka whakamanahia e matou te whakakore i te hapa e arai ana ki nga karere tukurua.

Ko te ripanga i raro nei e whakaatu ana me pehea te maha o nga hapa i ia ra, e arai ana ki te taarua o nga karere, nga huringa i roto i te tukanga o te kowhiri i nga uara o nga tawhā kua whakaahuatia i runga ake nei:

kōpuku-1
kōpuku-2
kōpuku-3
kōpuku-4

I mua i muri
I mua i muri
I mua i muri
I mua i muri

i rahua te horoi i te parepare
1749/2
694/2
47/0
1121/2

i angitu te ngana ano
410/2
205/1
24/0
241/2

Me mahara ano ka ngaro pea te whai take o nga whakatakotoranga i te wa e tipu haere ana te kaupapa, na reira ka piki ake te maha o nga raarangi. Ko te tohu tuatahi mo te iti rawa o te waahi ko te whakahokinga mai o nga karere e pa ana ki te rewharewha roa ki te raarangi Fluentd, ara, ka nui ake i te paepae slow_flush_log_threshold. Mai i tenei wa, he iti tonu te tawhē i mua i te nui o te tawhā tono_timeout, no reira he mea tika ki te whakautu ki enei karere i roto i te wa tika, me te whakahoki ano i te tukanga o te whiriwhiri i nga tautuhinga tino pai i whakaahuahia i runga ake nei.

mutunga

Ko te whakatikatika i te putunga putanga Fluentd tetahi o nga waahanga matua o te whirihora i te puranga EFK, te whakatau i te pumau o tana mahi me te whakanoho tika o nga tuhinga ki roto i nga tohu. I runga i te whakamaarama whirihoranga algorithm, ka mohio koe ka tuhia nga raarangi katoa ki te tohu ElasticSearch i runga i te raupapa tika, kaore he tukurua, he ngaronga ranei.

Panuihia etahi atu tuhinga i runga i ta maatau blog:

Source: will.com

Tāpiri i te kōrero