Fluentd: рдХрд┐рди рдпреЛ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ

Fluentd: рдХрд┐рди рдпреЛ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ

рдЖрдЬрдХрд▓, ELK рд╕реНрдЯреНрдпрд╛рдХ рдмрд┐рдирд╛ Kubernetes-рдЖрдзрд╛рд░рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдХрд▓реНрдкрдирд╛ рдЧрд░реНрди рдЕрд╕рдореНрднрд╡ рдЫ, рдЬрд╕рд▓реЗ рдХреНрд▓рд╕реНрдЯрд░рдХреЛ рджреБрд╡реИ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд░ рдкреНрд░рдгрд╛рд▓реА рдШрдЯрдХрд╣рд░реВрдХреЛ рд▓рдЧ рдмрдЪрдд рдЧрд░реНрджрдЫред рд╣рд╛рдореНрд░реЛ рдЕрднреНрдпрд╛рд╕рдорд╛, рд╣рд╛рдореА Logstash рдХреЛ рд╕рдЯреНрдЯрд╛ Fluentd рд╕рдБрдЧ EFK рд╕реНрдЯреНрдпрд╛рдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред

Fluentd рдПрдХ рдЖрдзреБрдирд┐рдХ, рд╡рд┐рд╢реНрд╡рд╡реНрдпрд╛рдкреА рд▓рдЧ рдХрд▓реЗрдХреНрдЯрд░ рд╣реЛ рдЬрд╕рд▓реЗ рдЕрдзрд┐рдХ рд░ рдЕрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИрдЫ рд░ рдХреНрд▓рд╛рдЙрдб рдиреЗрдЯрд┐рдн рдХрдореНрдкреНрдпреБрдЯрд┐рдЩ рдлрд╛рдЙрдиреНрдбреЗрд╢рдирдорд╛ рд╕рд╛рдореЗрд▓ рднрдПрдХреЛ рдЫ, рддреНрдпрд╕реИрд▓реЗ рдпрд╕рдХреЛ рд╡рд┐рдХрд╛рд╕ рднреЗрдХреНрдЯрд░ Kubernetes рд╕рдБрдЧ рд╕рдВрдпреЛрдЬрдирдорд╛ рдкреНрд░рдпреЛрдЧрдорд╛ рдХреЗрдиреНрджреНрд░рд┐рдд рдЫред

Logstash рдХреЛ рд╕рдЯреНрдЯрд╛ Fluentd рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рддрдереНрдпрд▓реЗ рд╕рдлреНрдЯрд╡реЗрдпрд░ рдкреНрдпрд╛рдХреЗрдЬрдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕рд╛рд░рд▓рд╛рдИ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрджреИрди, рддрдерд╛рдкрд┐, Fluentd рдпрд╕рдХреЛ рдмрд╣реБрдореБрдЦреА рдкреНрд░рддрд┐рднрд╛рдХреЛ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдпрд╕рдХреЛ рдЖрдлреНрдиреИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛред

рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЬрдм рд╣рд╛рдореАрд▓реЗ рд▓рдЧрд┐рдЩрдХреЛ рдЙрдЪреНрдЪ рддреАрд╡реНрд░рддрд╛рдХреЛ рд╕рд╛рде рд╡реНрдпрд╕реНрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛEFK рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдерд╛рд▓реНрдпреМрдВ, рд╣рд╛рдореАрд▓реЗ рдХрд┐рдмрд╛рдирд╛рдорд╛ рдХреЗрд╣реА рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдзреЗрд░реИ рдкрдЯрдХ рджреЛрд╣реЛрд░реНрдпрд╛рдЗрдПрдХреЛ рдерд┐рдпреЛ рднрдиреНрдиреЗ рддрдереНрдпрдХреЛ рд╕рд╛рдордирд╛ рдЧрд░реНтАНрдпреМрдВред рдпрд╕ рд▓реЗрдЦрдорд╛ рд╣рд╛рдореА рддрдкрд╛рдИрдВрд▓рд╛рдИ рдмрддрд╛рдЙрдиреЗрдЫреМрдВ рдХрд┐рди рдпреЛ рдШрдЯрдирд╛ рд╣реБрдиреНрдЫ рд░ рдХрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреЗред

рдХрд╛рдЧрдЬрд╛рдд рдирдХреНрдХрд▓рдХреЛ рд╕рдорд╕реНрдпрд╛

рд╣рд╛рдореНрд░рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛, Fluentd рд▓рд╛рдИ DaemonSet рдХреЛ рд░реВрдкрдорд╛ рддреИрдирд╛рде рдЧрд░рд┐рдПрдХреЛ рдЫ (рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдбрдорд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рд╕реБрд░реБ рд╣реБрдиреНрдЫ) рд░ /var/log/containers рдорд╛ stdout рдХрдиреНрдЯреЗрдирд░ рд▓рдЧрд╣рд░реВ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрджрдЫред рд╕рдЩреНрдХрд▓рди рд░ рдкреНрд░рд╢реЛрдзрди рдкрдЫрд┐, JSON рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рд▓рдЧрд╣рд░реВ рдЗрд▓рд╛рд╕реНрдЯрд┐рдХрд╕рд░реНрдЪрдорд╛ рдкрдард╛рдЗрдиреНрдЫ, рдХреНрд▓рд╕реНрдЯрд░ рд╡рд╛ рд╕реНрдЯреНрдпрд╛рдиреНрдбрдЕрд▓реЛрди рдлрд╛рд░рдордорд╛ рдЙрдард╛рдЗрдПрдХреЛ, рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд╕реНрдХреЗрд▓ рд░ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рд░ рдЧрд▓реНрддреА рд╕рд╣рд┐рд╖реНрдгреБрддрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВрдХреЛ рдЖрдзрд╛рд░рдорд╛ред рдХрд┐рдмрд╛рдирд╛ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдиреНрдЯрд░рдлреЗрд╕рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред

рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░рд┐рдЩ рдкреНрд▓рдЧрдЗрдирд╕рдБрдЧ Fluentd рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛, рд╣рд╛рдореАрд▓реЗ ElasticSearch рдорд╛ рдХреЗрд╣реА рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВрдорд╛ рдареНрдпрд╛рдХреНрдХреИ рдПрдЙрдЯреИ рд╕рд╛рдордЧреНрд░реА рд░ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛рдорд╛ рдорд╛рддреНрд░ рдлрд░рдХ рднрдПрдХреЛ рдЕрд╡рд╕реНрдерд╛рдХреЛ рд╕рд╛рдордирд╛ рдЧрд░реНрдпреМрдВред рддрдкрд╛рдИрдВрд▓реЗ рдЙрджрд╛рд╣рд░рдгрдХреЛ рд░реВрдкрдорд╛ Nginx рд▓рдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдпреЛ рд╕рдиреНрджреЗрд╢ рджреЛрд╣реЛрд░рд┐рдиреЗ рд╣реЛ рднрдиреА рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рд▓рдЧ рдлрд╛рдЗрд▓рдорд╛, рдпреЛ рд╕рдиреНрджреЗрд╢ рдПрдХрд▓ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫ:

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

рдпрджреНрдпрдкрд┐, ElasticSearch рдорд╛ рдпреЛ рд╕рдиреНрджреЗрд╢ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреЗ рдзреЗрд░реИ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рдЫрдиреН:

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

рдпрд╕рдмрд╛рд╣реЗрдХ, рддреНрдпрд╣рд╛рдБ рджреБрдИ рднрдиреНрджрд╛ рдмрдвреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реБрди рд╕рдХреНрдЫред

Fluentd рд▓рдЧрд╣рд░реВрдорд╛ рдпреЛ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрджрд╛, рддрдкрд╛рдИрдВрд▓реЗ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реАрд╕рдБрдЧ рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдЪреЗрддрд╛рд╡рдиреАрд╣рд░реВ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

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"

рдпреА рдЪреЗрддрд╛рд╡рдиреАрд╣рд░реВ рддрдм рд╣реБрдиреНрдЫрдиреН рдЬрдм ElasticSearch рд▓реЗ request_timeout рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд▓реЗ рддреЛрдХрд┐рдПрдХреЛ рд╕рдордпрднрд┐рддреНрд░ рдЕрдиреБрд░реЛрдзрдХреЛ рдЬрд╡рд╛рдл рдлрд░реНрдХрд╛рдЙрди рд╕рдХреНрджреИрди, рддреНрдпрд╕реИрд▓реЗ рдлрд░реНрд╡рд╛рд░реНрдб рдЧрд░рд┐рдПрдХреЛ рдмрдлрд░ рдЦрдгреНрдб рдЦрд╛рд▓реА рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрдиред рдпрд╕рдкрдЫрд┐, Fluentd рд▓реЗ рдлреЗрд░рд┐ ElasticSearch рдорд╛ рдмрдлрд░ рдЯреБрдХреНрд░рд╛ рдкрдард╛рдЙрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫ рд░ рдордирдорд╛рдиреА рд╕рдВрдЦреНрдпрд╛рдорд╛ рдкреНрд░рдпрд╛рд╕рд╣рд░реВ рдкрдЫрд┐, рд╕рдЮреНрдЪрд╛рд▓рди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реБрдиреНрдЫ:

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"

рдпрджреНрдпрдкрд┐, ElasticSearch рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░рд┐рдПрдХреЛ рдмрдлрд░ рдЯреБрдХреНрд░рд╛рд╣рд░реВрд▓рд╛рдИ рдЕрджреНрд╡рд┐рддреАрдп рд░реВрдкрдорд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрджрдЫ рд░ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рдХреЛ рд╕рдордпрдорд╛ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЕрджреНрд╡рд┐рддреАрдп _id рдлрд┐рд▓реНрдб рдорд╛рдирд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рд╕рдиреНрджреЗрд╢рд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐рд╣рд░реВ рдпрд╕рд░реА рджреЗрдЦрд┐рдиреНрдЫрдиреНред

Kibana рдорд╛ рдпреЛ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:

Fluentd: рдХрд┐рди рдпреЛ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ

рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг

рдпреЛ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдзреЗрд░реИ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдЫрдиреНред рддреА рдордзреНрдпреЗ рдПрдЙрдЯрд╛ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рдЧрдЬрд╛рддрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╣реНрдпрд╛рд╕ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ fluent-plugin-elasticsearch рдкреНрд▓рдЧрдЗрдирдорд╛ рдирд┐рд░реНрдорд┐рдд рд╕рдВрдпрдиреНрддреНрд░ рд╣реЛред рдпрджрд┐ рддрдкрд╛рдЗрдБ рдпреЛ рдореЗрдХрд╛рдирд┐рдЬрдо рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, ElasticSearch рд▓реЗ рдлрд░реНрд╡рд╛рд░реНрдбрд┐рдЩ рдЪрд░рдгрдорд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рд╣рд░реВ рдкрд╣рд┐рдЪрд╛рди рдЧрд░реНрдиреЗрдЫ рд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВрд▓рд╛рдИ рд░реЛрдХреНрдиреЗрдЫред рддрд░ рд╣рд╛рдореАрд▓реЗ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрдиреБрдкрд░реНрдЫ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреЗ рдпреЛ рд╡рд┐рдзрд┐рд▓реЗ рдЕрдиреБрд╕рдиреНрдзрд╛рдирдХреЛ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдЧрд░реНрджрдЫ рд░ рдЯрд╛рдЗрдордЖрдЙрдЯрдХреЛ рдЕрднрд╛рд╡рдорд╛ рддреНрд░реБрдЯрд┐рд▓рд╛рдИ рд╣рдЯрд╛рдЙрди рд╕рдХреНрджреИрди, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ рдпрд╕рдХреЛ рдкреНрд░рдпреЛрдЧ рддреНрдпрд╛рдЧреНрдпреМрдВред

рдЫреЛрдЯреЛ рдЕрд╡рдзрд┐рдХреЛ рд╕рдЮреНрдЬрд╛рд▓ рд╕рдорд╕реНрдпрд╛ рд╡рд╛ рд▓рдЧрд┐рдЩ рддреАрд╡реНрд░рддрд╛ рдмрдвреЗрдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд▓рдЧ рд╣рд╛рдирд┐ рд░реЛрдХреНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдлреНрд▓реБрдПрдиреНрдЯ рдЖрдЙрдЯрдкреБрдЯрдорд╛ рдмрдлрд░рд┐рдЩ рдкреНрд▓рдЧрдЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред рдпрджрд┐ рдХреБрдиреИ рдХрд╛рд░рдгрд▓реЗ ElasticSearch рд▓реЗ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рдорд╛ рдХрд╛рдЧрдЬрд╛рдд рддреБрд░реБрдиреНрддреИ рд▓реЗрдЦреНрди рдЕрд╕рдорд░реНрде рдЫ рднрдиреЗ, рдХрд╛рдЧрдЬрд╛рддрд▓рд╛рдИ рдбрд┐рд╕реНрдХрдорд╛ рд▓рд╛рдордмрджреНрдз рдЧрд░реА рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫред рддрд╕рд░реНрде, рд╣рд╛рдореНрд░реЛ рдХреЗрд╕рдорд╛, рд╕рдорд╕реНрдпрд╛рдХреЛ рд╕реНрд░реЛрддрд▓рд╛рдИ рд╣рдЯрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдЬреБрди рдорд╛рдерд┐ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рддреНрд░реБрдЯрд┐ рдирд┐рдореНрддреНрдпрд╛рдЙрдБрдЫ, рдмрдлрд░рд┐рдЩ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рд╣реА рдорд╛рдирд╣рд░реВ рд╕реЗрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдЬрд╕рдорд╛ Fluentd рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдкрд░реНрдпрд╛рдкреНрдд рдЖрдХрд╛рд░рдХреЛ рд╣реБрдиреЗрдЫ рд░ред рдПрдХреИ рд╕рдордпрдорд╛ рддреЛрдХрд┐рдПрдХреЛ рд╕рдордпрдорд╛ рдЦрд╛рд▓реА рдЧрд░реНрди рдкреНрд░рдмрдиреНрдз рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдпреЛ рдзреНрдпрд╛рди рджрд┐рди рд▓рд╛рдпрдХ рдЫ рдХрд┐ рддрд▓ рдЫрд▓рдлрд▓ рдЧрд░рд┐рдПрдХрд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рдорд╛рдирд╣рд░реВ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд▓рдЧрдЗрдирд╣рд░реВрдорд╛ рдмрдлрд░рд┐рдЩ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╣реБрдиреНрдЫрдиреН, рдХрд┐рдирдХрд┐ рддрд┐рдиреАрд╣рд░реВ рдзреЗрд░реИ рдХрд╛рд░рдХрд╣рд░реВрдорд╛ рдирд┐рд░реНрднрд░ рд╣реБрдиреНрдЫрдиреН: рд╕реЗрд╡рд╛рд╣рд░реВрджреНрд╡рд╛рд░рд╛ рд▓рдЧрдорд╛ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рд▓реЗрдЦреНрдиреЗ рддреАрд╡реНрд░рддрд╛, рдбрд┐рд╕реНрдХ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рджрд░реНрд╢рди, рдиреЗрдЯрд╡рд░реНрдХред рдЪреНрдпрд╛рдирд▓ рд▓реЛрдб рд░ рдпрд╕рдХреЛ рдмреНрдпрд╛рдиреНрдбрд╡рд┐рдеред рддрд╕рд░реНрде, рдмрдлрд░ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЬреБрди рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреЗрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рдЫ, рддрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЫреИрди, рд▓рд╛рдореЛ рдЦреЛрдЬрд╣рд░реВрд▓рд╛рдИ рдЕрдиреНрдзрд╛рдзреБрдиреНрдз рд░реВрдкрдорд╛ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрджреИ, рддрдкрд╛рдИрдВрд▓реЗ рдбрд┐рдмрдЧрд┐рдЩ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬреБрди Fluentd рд▓реЗ рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рдХреНрд░рдордорд╛ рдпрд╕рдХреЛ рд▓рдЧрдорд╛ рд▓реЗрдЦреНрдЫ рд░ рддреБрд▓рдирд╛рддреНрдордХ рд░реВрдкрдорд╛ рдЫрд┐рдЯреЛ рд╕рд╣реА рдорд╛рдирд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рд╕рдорд╕реНрдпрд╛ рд░реЗрдХрд░реНрдб рднрдПрдХреЛ рд╕рдордпрдорд╛, рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдереНрдпреЛ:

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

рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрджрд╛, рдирд┐рдореНрди рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рдорд╛рдирд╣рд░реВ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдЪрдпрди рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ:
chunk_limit_size тАФ рдЯреБрдХреНрд░рд╛рд╣рд░реВрдХреЛ рдЖрдХрд╛рд░ рдЬрд╕рдорд╛ рдмрдлрд░рдорд╛ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рд╡рд┐рднрд╛рдЬрд┐рдд рдЫрдиреНред

  • flush_interval тАФ рд╕рдордп рдЕрдиреНрддрд░рд╛рд▓ рдЬрд╕ рдкрдЫрд┐ рдмрдлрд░ рдЦрд╛рд▓реА рд╣реБрдиреНрдЫред
  • queue_limit_length тАФ рд▓рд╛рдордорд╛ рдЯреБрдХреНрд░рд╛рд╣рд░реВрдХреЛ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ред
  • request_timeout рддреНрдпреЛ рд╕рдордп рд╣реЛ рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ Fluentd рд░ ElasticSearch рдмреАрдЪрдХреЛ рдЬрдбрд╛рди рд╕реНрдерд╛рдкрд┐рдд рд╣реБрдиреНрдЫред

рдХреБрд▓ рдмрдлрд░ рдЖрдХрд╛рд░ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ queue_limit_length рд░ chunk_limit_size рд▓рд╛рдИ рдЧреБрдгрди рдЧрд░реЗрд░ рдЧрдгрдирд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЬрд╕рд▓рд╛рдИ "рд▓рд╛рдордорд╛ рд░рд╣реЗрдХрд╛ рднрд╛рдЧрд╣рд░реВрдХреЛ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛, рдЬрд╕рдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХрдХреЛ рдПрдЙрдЯрд╛ рджрд┐рдЗрдПрдХреЛ рдЖрдХрд╛рд░ рдЫ" рднрдиреЗрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдпрджрд┐ рдмрдлрд░ рд╕рд╛рдЗрдЬ рдЕрдкрд░реНрдпрд╛рдкреНрдд рдЫ рднрдиреЗ, рдирд┐рдореНрди рдЪреЗрддрд╛рд╡рдиреА рд▓рдЧрд╣рд░реВрдорд╛ рджреЗрдЦрд╛ рдкрд░реНрдиреЗрдЫ:

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

рдпрд╕рдХреЛ рдорддрд▓рдм рдпреЛ рд╣реЛ рдХрд┐ рдмрдлрд░рд╕рдБрдЧ рдЖрд╡рдВрдЯрд┐рдд рд╕рдордпрдорд╛ рдЦрд╛рд▓реА рдЧрд░реНрди рд╕рдордп рдЫреИрди рд░ рдкреВрд░реНрдг рдмрдлрд░рдорд╛ рдкреНрд░рд╡реЗрд╢ рдЧрд░реНрдиреЗ рдбрд╛рдЯрд╛ рдмреНрд▓рдХ рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЬрд╕рд▓реЗ рд▓рдЧрд╣рд░реВрдХреЛ рдЕрдВрд╢ рдЧреБрдорд╛рдЙрдиреЗрдЫред

рддрдкрд╛рдИрд▓реЗ рдмрдлрд░рд▓рд╛рдИ рджреБрдИ рддрд░рд┐рдХрд╛рдорд╛ рдмрдврд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ: рдпрд╛ рдд рд▓рд╛рдордорд╛ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХреНрд░рд╛рдХреЛ рд╕рд╛рдЗрдЬ рдмрдврд╛рдПрд░, рд╡рд╛ рд▓рд╛рдордорд╛ рд╣реБрди рд╕рдХреНрдиреЗ рдЯреБрдХреНрд░рд╛рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдмрдврд╛рдПрд░ред

рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ chunk рд╕рд╛рдЗрдЬ chunk_limit_size 32 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рднрдиреНрджрд╛ рдмрдвреАрдорд╛ рд╕реЗрдЯ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рддрдм ElasticSeacrh рд▓реЗ рдпрд╕рд▓рд╛рдИ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрджреИрди, рдХрд┐рдирдХрд┐ рдЖрдЧрдорди рдкреНрдпрд╛рдХреЗрдЯ рдзреЗрд░реИ рдареВрд▓реЛ рд╣реБрдиреЗрдЫред рддрд╕рд░реНрде, рдпрджрд┐ рддрдкрд╛рдИрд▓рд╛рдИ рдмрдлрд░ рдердк рдмрдврд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреЗ, рдЕрдзрд┐рдХрддрдо рд▓рд╛рдо рд▓рдореНрдмрд╛рдЗ queue_limit_length рдмрдврд╛рдЙрдиреБ рд░рд╛рдореНрд░реЛ рд╣реБрдиреНрдЫред

рдЬрдм рдмрдлрд░ рдУрднрд░рдлреНрд▓реЛ рдмрдиреНрдж рд╣реБрдиреНрдЫ рд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╕рдиреНрджреЗрд╢ рдорд╛рддреНрд░ рд░рд╣рдиреНрдЫ, рддрдкрд╛рдИрд▓реЗ рдЕрдиреБрд░реЛрдз_рдЯрд╛рдЗрдордЖрдЙрдЯ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдмрдврд╛рдЙрди рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрджреНрдпрдкрд┐, рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдорд╛рдирд▓рд╛рдИ реиреж рд╕реЗрдХреЗрдиреНрдбрднрдиреНрджрд╛ рдмрдвреАрдорд╛ рд╕реЗрдЯ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рдирд┐рдореНрди рдЪреЗрддрд╛рд╡рдиреАрд╣рд░реВ 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" 

рдпреЛ рд╕рдиреНрджреЗрд╢рд▓реЗ рдХреБрдиреИ рдкрдирд┐ рддрд░рд┐рдХрд╛рд▓реЗ рдкреНрд░рдгрд╛рд▓реАрдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрджреИрди рд░ рдпрд╕рдХреЛ рдорддрд▓рдм рдпреЛ рд╣реЛ рдХрд┐ рдмрдлрд░ рдлреНрд▓рд╕рд┐рдЩ рд╕рдордпрд▓реЗ slow_flush_log_threshold рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рднрдиреНрджрд╛ рдмрдвреА рд╕рдордп рд▓рд┐рдпреЛред рдпреЛ рдбрд┐рдмрдЧрд┐рдЩ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рд░ рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдЕрдиреБрд░реЛрдз_рдЯрд╛рдЗрдордЖрдЙрдЯ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рдорд╛рди рдЫрдиреМрдЯ рдЧрд░реНрджрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред

рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдЪрдпрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЫ:

  1. рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ_рдЯрд╛рдЗрдордЖрдЙрдЯрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рднрдиреНрджрд╛ рдмрдвреА рд╣реБрдиреЗ рдЧреНрдпрд╛рд░реЗрдиреНрдЯреА рдорд╛рдирдорд╛ рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН (рд╕рдп рд╕реЗрдХреЗрдиреНрдб)ред рд╕реЗрдЯрдЕрдкрдХреЛ рдмрдЦрдд, рдпреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рд╕рд╣реА рд╕реЗрдЯрд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ рдореБрдЦреНрдп рдорд╛рдкрджрдгреНрдб рд╕рдордп рд╕рдорд╛рдкреНрддрд┐рдХреЛ рдХрдореАрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЪреЗрддрд╛рд╡рдиреАрд╣рд░реВ рд╣рд░рд╛рдЙрдиреБ рд╣реБрдиреЗрдЫред
  2. slow_flush_log_threshold рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб рдирд╛рдШреЗрдХреЛ рд╕рдиреНрджреЗрд╢рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрдиреБрд╣реЛрд╕реНред elapsed_time рдлрд┐рд▓реНрдбрдорд╛ рд░рд╣реЗрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рдкрд╛рдард▓реЗ рдмрдлрд░ рдЦрд╛рд▓реА рднрдПрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рджреЗрдЦрд╛рдЙрдиреЗрдЫред
  3. рдЕрд╡рд▓реЛрдХрди рдЕрд╡рдзрд┐рдорд╛ рдкреНрд░рд╛рдкреНрдд рдЕрдзрд┐рдХрддрдо рдмрд┐рддреЗрдХреЛ_рд╕рдордп рдорд╛рди рднрдиреНрджрд╛ рдареВрд▓реЛ рдорд╛рдирдорд╛ request_timeout рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд╣рд╛рдореАрд▓реЗ рдЕрдиреБрд░реЛрдз_рд╕рдордпрдЖрдЙрдЯ рдорд╛рдирд▓рд╛рдИ elapsed_time + 50% рдХреЛ рд░реВрдкрдорд╛ рдЧрдгрдирд╛ рдЧрд░реНрдЫреМрдВред
  4. рд▓рдЧрдмрд╛рдЯ рд▓рд╛рдореЛ рдмрдлрд░ рдлреНрд▓рд╕рд╣рд░реВ рдмрд╛рд░реЗ рдЪреЗрддрд╛рд╡рдиреАрд╣рд░реВ рд╣рдЯрд╛рдЙрди, рддрдкрд╛рдИрдВрд▓реЗ slow_flush_log_threshold рдХреЛ рдорд╛рди рдмрдврд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рд╣рд╛рдореА рдпреЛ рдорд╛рдирд▓рд╛рдИ elapsed_time + 25% рдХреЛ рд░реВрдкрдорд╛ рдЧрдгрдирд╛ рдЧрд░реНрдЫреМрдВред

рдпреА рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рдЕрдиреНрддрд┐рдо рдорд╛рдирд╣рд░реВ, рдкрд╣рд┐рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░рд┐рдП рдЕрдиреБрд╕рд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдХреЗрд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдкрдорд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░рд┐рдиреНрдЫред рдорд╛рдерд┐рдХреЛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрдЫреНрдпрд╛рдПрд░, рд╣рд╛рдореА рддреНрд░реБрдЯрд┐ рд╣рдЯрд╛рдЙрдиреЗ рдЧреНрдпрд╛рд░реЗрдиреНрдЯреА рдЫреМрдВ рдЬрд╕рд▓реЗ рдмрд╛рд░рдореНрдмрд╛рд░ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдирд┐рдореНрддреНрдпрд╛рдЙрдБрдЫред

рддрд▓рдХреЛ рддрд╛рд▓рд┐рдХрд╛рд▓реЗ рджреЗрдЦрд╛рдЙрдБрджрдЫ рдХрд┐ рдХрд╕рд░реА рдкреНрд░рддрд┐ рджрд┐рди рддреНрд░реБрдЯрд┐рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛, рд╕рдиреНрджреЗрд╢рд╣рд░реВрдХреЛ рдирдХреНрдХрд▓рдХреЛ рд▓рд╛рдЧрд┐ рдиреЗрддреГрддреНрд╡ рдЧрд░реНрджрдЫ, рдорд╛рдерд┐ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХрд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рдорд╛рдирд╣рд░реВ рдЪрдпрди рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ:

рдиреЛрдб-1
рдиреЛрдб-2
рдиреЛрдб-3
рдиреЛрдб-4

рдкрд╣рд┐рд▓реЗ рдкрдЫрд┐
рдкрд╣рд┐рд▓реЗ рдкрдЫрд┐
рдкрд╣рд┐рд▓реЗ рдкрдЫрд┐
рдкрд╣рд┐рд▓реЗ рдкрдЫрд┐

рдмрдлрд░ рдлреНрд▓рд╢ рдЧрд░реНрди рдЕрд╕рдлрд▓
1749/2
694/2
47/0
1121/2

рдкреБрди: рдкреНрд░рдпрд╛рд╕ рд╕рдлрд▓ рднрдпреЛ
410/2
205/1
24/0
241/2

рдпреЛ рдердк рдзреНрдпрд╛рди рджрд┐рди рд▓рд╛рдпрдХ рдЫ рдХрд┐ рдирддрд┐рдЬрд╛ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдвреНрджреИ рдЬрд╛рдБрджрд╛ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдЧреБрдорд╛рдЙрди рд╕рдХреНрдЫ рд░, рддрджрдиреБрд╕рд╛рд░, рд▓рдЧрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдмрдвреНрдЫред рдЕрдкрд░реНрдпрд╛рдкреНрдд рдЯрд╛рдЗрдордЖрдЙрдЯрдХреЛ рдкреНрд░рд╛рдердорд┐рдХ рд╕рдВрдХреЗрдд Fluentd рд▓рдЧрдорд╛ рд▓рд╛рдореЛ рдмрдлрд░ рдлреНрд▓рд╢рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдлрд░реНрдХрд╛рдЙрдиреБ рд╣реЛ, рдЕрд░реНрдерд╛рддреН, slow_flush_log_threshold рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб рдирд╛рдШреЗрдХреЛред рдпрд╕ рдмрд┐рдиреНрджреБрдмрд╛рдЯ, рдЕрдиреБрд░реЛрдз_рдЯрд╛рдЗрдордЖрдЙрдЯ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдирд╛рдШреНрдиреБ рдЕрдШрд┐ рдЕрдЭреИ рдкрдирд┐ рд╕рд╛рдиреЛ рдорд╛рд░реНрдЬрд┐рди рдЫ, рддреНрдпрд╕реИрд▓реЗ рдпреА рд╕рдиреНрджреЗрд╢рд╣рд░реВрд▓рд╛рдИ рд╕рдордпрдореИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рди рд░ рдорд╛рдерд┐ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЗрд╖реНрдЯрддрдо рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдЪрдпрди рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЛрд╣реЛрд░реНрдпрд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫред

рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛

Fluentd рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдлрд╛рдЗрди-рдЯреНрдпреВрдирд┐рдВрдЧ EFK рд╕реНрдЯреНрдпрд╛рдХ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреЗ рдореБрдЦреНрдп рдЪрд░рдгрд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рд╣реЛ, рдпрд╕рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рд╕реНрдерд┐рд░рддрд╛ рд░ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рд╣рд░реВрдорд╛ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВрдХреЛ рд╕рд╣реА рд╕реНрдерд╛рди рдирд┐рд░реНрдзрд╛рд░рдгред рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдордХреЛ рдЖрдзрд╛рд░рдорд╛, рддрдкрд╛рдЗрдБ рдирд┐рд╢реНрдЪрд┐рдд рд╣реБрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдХрд┐ рд╕рдмреИ рд▓рдЧрд╣рд░реВ рдЗрд▓рд╛рд╕реНрдЯрд┐рдХрд╕рд░реНрдЪ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рдорд╛ рд╕рд╣реА рдХреНрд░рдордорд╛ рд▓реЗрдЦрд┐рдиреЗрдЫрдиреН, рджреЛрд╣реЛрд░рд┐рдиреЗ рд╡рд╛ рд╣рд╛рдирд┐ рдмрд┐рдирд╛ред

рд╣рд╛рдореНрд░реЛ рдмреНрд▓рдЧрдорд╛ рдЕрдиреНрдп рд▓реЗрдЦрд╣рд░реВ рдкрдирд┐ рдкрдвреНрдиреБрд╣реЛрд╕реН:

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди