เชฎเชพเชจเชตเซ€เช“ เช…เชฅเชตเชพ เชเชฒเชฟเชฏเชจ เชŸเซ‡เช•เซเชจเซ‹เชฒเซ‹เชœเซ€เช“ เชฎเชพเชŸเซ‡ เชนเชพเช‰เชธ เชกเซ‡เชŸเชพเชฌเซ‡เช เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹

เชเชฒเซ‡เช•เซเชธเซ€ เชฒเชฟเชเซเชจเซ‹เชต, MKB เชจเชพ เชฎเชพเชนเชฟเชคเซ€ เชชเซเชฐเซŒเชฆเซเชฏเซ‹เช—เชฟเช• เชจเชฟเชฏเชพเชฎเช•เชจเชพ เชฐเซ€เชฎเซ‹เชŸ เชธเชฐเซเชตเชฟเชธ เชšเซ‡เชจเชฒเซ‹ เชฎเชพเชŸเซ‡ เชธเช•เซเชทเชฎเชคเชพ เช•เซ‡เชจเซเชฆเซเชฐเชจเชพ เชตเชกเชพ

เชฎเชพเชจเชตเซ€เช“ เช…เชฅเชตเชพ เชเชฒเชฟเชฏเชจ เชŸเซ‡เช•เซเชจเซ‹เชฒเซ‹เชœเซ€เช“ เชฎเชพเชŸเซ‡ เชนเชพเช‰เชธ เชกเซ‡เชŸเชพเชฌเซ‡เช เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹

ELK เชธเซเชŸเซ‡เช• (ElasticSearch, Logstash, Kibana) เชจเชพ เชตเชฟเช•เชฒเซเชช เชคเชฐเซ€เช•เซ‡, เช…เชฎเซ‡ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฒเซ‹เช— เชฎเชพเชŸเซ‡ เชกเซ‡เชŸเชพ เชธเซเชŸเซ‹เชฐ เชคเชฐเซ€เช•เซ‡ เช•เชฐเชตเชพ เชชเชฐ เชธเช‚เชถเซ‹เชงเชจ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช.

เช† เชฒเซ‡เช–เชฎเชพเช‚, เช…เชฎเซ‡ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเชพ เช…เชฎเชพเชฐเชพ เช…เชจเซเชญเชต เช…เชจเซ‡ เชชเชพเชฏเชฒเซ‹เชŸ เช“เชชเชฐเซ‡เชถเชจเชจเชพ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช. เชคเซ‡ เชคเชฐเชค เชœ เชจเซ‹เช‚เชงเชตเซเช‚ เชœเซ‹เชˆเช เช•เซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชชเซเชฐเชญเชพเชตเชถเชพเชณเซ€ เชนเชคเชพ.


เชฎเชพเชจเชตเซ€เช“ เช…เชฅเชตเชพ เชเชฒเชฟเชฏเชจ เชŸเซ‡เช•เซเชจเซ‹เชฒเซ‹เชœเซ€เช“ เชฎเชพเชŸเซ‡ เชนเชพเช‰เชธ เชกเซ‡เชŸเชพเชฌเซ‡เช เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹

เช†เช—เชณ, เช…เชฎเซ‡ เช…เชฎเชพเชฐเซ€ เชธเชฟเชธเซเชŸเชฎ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช—เซ‹เช เชตเซ‡เชฒ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เช•เชฏเชพ เช˜เชŸเช•เซ‹เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡ เชคเซ‡เชจเซเช‚ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฐเซเชฃเชจ เช•เชฐเซ€เชถเซเช‚. เชชเชฐเช‚เชคเซ เชนเชตเซ‡ เชนเซเช‚ เช† เชกเซ‡เชŸเชพเชฌเซ‡เช เชตเชฟเชถเซ‡ เชฅเซ‹เชกเซ€ เชตเชพเชค เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚, เช…เชจเซ‡ เชคเซ‡ เชถเชพ เชฎเชพเชŸเซ‡ เชงเซเชฏเชพเชจ เช†เชชเชตเซเช‚ เชฏเซ‹เช—เซเชฏ เช›เซ‡. เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชกเซ‡เชŸเชพเชฌเซ‡เช เช Yandex เชคเชฐเชซเชฅเซ€ เช‰เชšเซเชš-เชชเซเชฐเชฆเชฐเซเชถเชจ เชตเชฟเชถเซเชฒเซ‡เชทเชฃเชพเชคเซเชฎเช• เช•เซ‰เชฒเชฎเชฐ เชกเซ‡เชŸเชพเชฌเซ‡เช เช›เซ‡. เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— Yandex เชธเซ‡เชตเชพเช“เชฎเชพเช‚ เชฅเชพเชฏ เช›เซ‡, เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชคเซ‡ Yandex.Metrica เชฎเชพเชŸเซ‡ เชฎเซเช–เซเชฏ เชกเซ‡เชŸเชพ เชธเซเชŸเซ‹เชฐเซ‡เชœ เช›เซ‡. เช“เชชเชจ เชธเซ‹เชฐเซเชธ เชธเชฟเชธเซเชŸเชฎ, เชฎเชซเชค. เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€, เชฎเชจเซ‡ เชนเช‚เชฎเซ‡เชถเชพ เช†เชถเซเชšเชฐเซเชฏ เชฅเชฏเซเช‚ เช›เซ‡ เช•เซ‡ เชคเซ‡เช“เช เชคเซ‡เชจเซ‹ เช…เชฎเชฒ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเซเชฏเซ‹, เช•เชพเชฐเชฃ เช•เซ‡ เชคเซเชฏเชพเช‚ เชตเชฟเชšเชฟเชคเซเชฐ เชฐเซ€เชคเซ‡ เชฎเซ‹เชŸเซ‹ เชกเซ‡เชŸเชพ เช›เซ‡. เช…เชจเซ‡ เชฎเซ‡เชŸเซเชฐเชฟเช•เชพเชจเซเช‚ เชฏเซเชเชฐ เชˆเชจเซเชŸเชฐเชซเซ‡เชธ เชชเซ‹เชคเซ‡ เช–เซ‚เชฌ เชœ เชฒเชตเชšเซ€เช• เช…เชจเซ‡ เชเชกเชชเซ€ เช›เซ‡. เช† เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชพเชฅเซ‡เชจเชพ เชชเซเชฐเชฅเชฎ เชชเชฐเชฟเชšเชฏเชฎเชพเช‚, เช›เชพเชช เช›เซ‡: โ€œเชธเชพเชฐเซเช‚, เช†เช–เชฐเซ‡! เชฒเซ‹เช•เซ‹ เชฎเชพเชŸเซ‡ เชฌเชจเชพเชตเซ‡เชฒ เช›เซ‡! เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฅเซ€ เชถเชฐเซ‚ เช•เชฐเซ€เชจเซ‡ เช…เชจเซ‡ เชตเชฟเชจเช‚เชคเซ€เช“ เชฎเซ‹เช•เชฒเชตเชพ เชธเชพเชฅเซ‡ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เช›เซ‡.

เช† เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เช–เซ‚เชฌ เชœ เช“เช›เซ€ เชเชจเซเชŸเซเชฐเซ€ เชฅเซเชฐเซ‡เชถเซ‹เชฒเซเชก เช›เซ‡. เชธเชฐเซ‡เชฐเชพเชถ-เช•เซเชถเชณ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพ เชชเชฃ เช† เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‡ เชฅเซ‹เชกเซ€เชตเชพเชฐเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชถเชฐเซ‚ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เชฌเชงเซเช‚ เชธเซเชชเชทเซเชŸ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เชœเซ‡ เชฒเซ‹เช•เซ‹ Linux เชฎเชพเช‚ เชจเชตเชพ เช›เซ‡ เชคเซ‡เช“ เชชเชฃ เชเชกเชชเชฅเซ€ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจเชจเซ‡ เชนเซ‡เชจเซเชกเชฒ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชธเชฐเชณ เช•เชพเชฎเช—เซ€เชฐเซ€ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เชœเซ‹ เช…เช—เชพเช‰, Big Data, Hadoop, Google BigTable, HDFS เชœเซ‡เชตเชพ เชถเชฌเซเชฆเซ‹ เชธเชพเชฅเซ‡, เชเช• เชธเชพเชฎเชพเชจเซเชฏ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเชจเชพ เชตเชฟเชšเชพเชฐเซ‹ เชนเชคเชพ เช•เซ‡ เชคเซ‡ เช…เชฎเซเช• เชŸเซ‡เชฐเชพเชฌเชพเชˆเชŸ, เชชเซ‡เชŸเชพเชฌเชพเชˆเชŸ เชตเชฟเชถเซ‡ เช›เซ‡, เช•เซ‡ เช•เซ‡เชŸเชฒเชพเช• เชธเซเชชเชฐเชนเซเชฏเซเชฎเชจ เช† เชธเชฟเชธเซเชŸเชฎเซ‹เชจเซ€ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เช…เชจเซ‡ เชตเชฟเช•เชพเชธเชฎเชพเช‚ เชธเชพเชฎเซ‡เชฒ เช›เซ‡, เชคเซ‹ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธเชจเชพ เช†เช—เชฎเชจ เชธเชพเชฅเซ‡. เชกเซ‡เชŸเชพเชฌเซ‡เช, เช…เชฎเชจเซ‡ เชเช• เชธเชฐเชณ, เชธเชฎเชœเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเซเช‚ เชŸเซ‚เชฒ เชฎเชณเซเชฏเซเช‚ เช›เซ‡ เชœเซ‡เชจเซ€ เชฎเชฆเชฆเชฅเซ€ เชคเชฎเซ‡ เช…เช—เชพเช‰เชจเชพ เช…เชชเซเชฐเชพเชชเซเชฏ เชถเซเชฐเซ‡เชฃเซ€เชจเชพ เช•เชพเชฐเซเชฏเซ‹เชจเซ‡ เชนเชฒ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เชคเซ‡ เชซเช•เซเชค เชเช• เชเช•เชฆเชฎ เชธเชฐเซ‡เชฐเชพเชถ เชฎเชถเซ€เชจ เช…เชจเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เชชเชพเช‚เชš เชฎเชฟเชจเชฟเชŸ เชฒเซ‡ เช›เซ‡. เชเชŸเชฒเซ‡ เช•เซ‡, เช…เชฎเชจเซ‡ เช†เชตเซ‹ เชกเซ‡เชŸเชพเชฌเซ‡เช เชฎเชณเซเชฏเซ‹ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, MySql, เชชเชฐเช‚เชคเซ เชฎเชพเชคเซเชฐ เช…เชฌเชœเซ‹ เชฐเซ‡เช•เซ‹เชฐเซเชก เชธเซเชŸเซ‹เชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡! SQL เชญเชพเชทเชพ เชธเชพเชฅเซ‡ เชšเซ‹เช•เซเช•เชธ เชธเซเชชเชฐ-เช†เชฐเซเช•เชพเช‡เชตเชฐ. เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เชฒเซ‹เช•เซ‹เชจเซ‡ เชเชฒเชฟเชฏเชจเซเชธเชจเชพ เชถเชธเซเชคเซเชฐเซ‹ เชธเซ‹เช‚เชชเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชนเชคเชพ.

เช…เชฎเชพเชฐเซ€ เชฒเซ‹เช—เซ€เช‚เช— เชธเชฟเชธเซเชŸเชฎ เชตเชฟเชถเซ‡

เชฎเชพเชนเชฟเชคเซ€ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชซเซ‹เชฐเซเชฎเซ‡เชŸ เชตเซ‡เชฌ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธเชจเซ€ IIS เชฒเซ‹เช— เชซเชพเช‡เชฒเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (เช…เชฎเซ‡ เชนเชพเชฒเชฎเชพเช‚ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเซ‰เช—เซเชธเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชชเชฃ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช, เชชเชฐเช‚เชคเซ เชชเซเชฐเชพเชฏเซ‹เช—เชฟเช• เชคเชฌเช•เซเช•เซ‡ เชฎเซเช–เซเชฏ เชงเซเชฏเซ‡เชฏ IIS เชฒเซ‹เช— เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชตเชพเชจเซเช‚ เช›เซ‡).

เชตเชฟเชตเชฟเชง เช•เชพเชฐเชฃเซ‹เชธเชฐ, เช…เชฎเซ‡ ELK เชธเซเชŸเซ‡เช•เชจเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช›เซ‹เชกเซ€ เชถเช•เซเชฏเชพ เชจเชฅเซ€, เช…เชจเซ‡ เช…เชฎเซ‡ LogStash เช…เชจเซ‡ Filebeat เช˜เชŸเช•เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซเช‚ เชšเชพเชฒเซ เชฐเชพเช–เซ€เช เช›เซ€เช, เชœเซ‡เชฃเซ‡ เชชเซ‹เชคเชพเชจเซ‡ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เชธเชพเชฌเชฟเชค เช•เชฐเซเชฏเชพ เช›เซ‡ เช…เชจเซ‡ เชคเชฆเซเชฆเชจ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏ เช…เชจเซ‡ เช…เชจเซเชฎเชพเชจเชฟเชค เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซเชฏเซเช‚ เช›เซ‡.

เชธเชพเชฎเชพเชจเซเชฏ เชฒเซ‹เช—เซ€เช‚เช— เชฏเซ‹เชœเชจเชพ เชจเซ€เชšเซ‡เชจเซ€ เช†เช•เซƒเชคเชฟเชฎเชพเช‚ เชฌเชคเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡:

เชฎเชพเชจเชตเซ€เช“ เช…เชฅเชตเชพ เชเชฒเชฟเชฏเชจ เชŸเซ‡เช•เซเชจเซ‹เชฒเซ‹เชœเซ€เช“ เชฎเชพเชŸเซ‡ เชนเชพเช‰เชธ เชกเซ‡เชŸเชพเชฌเซ‡เช เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชฒเช–เชตเชพเชจเซ€ เชเช• เชตเชฟเชถเซ‡เชทเชคเชพ เช เช›เซ‡ เช•เซ‡ เชฎเซ‹เชŸเชพ เชฌเซ…เชšเซ‡เชธเชฎเชพเช‚ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธเชจเซเช‚ เช…เชตเชพเชฐเชจเชตเชพเชฐ (เชเช• เชตเชพเชฐ เชชเซเชฐเชคเชฟ เชธเซ‡เช•เชจเซเชก) เชจเชฟเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡. เชฆเซ‡เช–เซ€เชคเซ€ เชฐเซ€เชคเซ‡, เช† เชธเซŒเชฅเซ€ "เชธเชฎเชธเซเชฏเชพเชฏเซเช•เซเชค" เชญเชพเช— เช›เซ‡ เชœเซ‡เชจเซ‹ เชคเชฎเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชชเซเชฐเชฅเชฎเชตเชพเชฐ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ‹ เช…เชจเซเชญเชต เช•เชฐเซ‹ เช›เซ‹ เชคเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เช…เชจเซเชญเชตเซ‹ เช›เซ‹: เชฏเซ‹เชœเชจเชพ เชฅเซ‹เชกเซ€ เชตเชงเซ เชœเชŸเชฟเชฒ เชฌเชจเซ€ เชœเชพเชฏ เช›เซ‡.
LogStash เชฎเชพเชŸเซ‡เชจเซเช‚ เชชเซเชฒเช—เช‡เชจ, เชœเซ‡ เชธเซ€เชงเชพ เชœ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชฆเชพเช–เชฒ เช•เชฐเซ‡ เช›เซ‡, เชคเซ‡เชฃเซ‡ เช…เชนเซ€เช‚ เช˜เชฃเซ€ เชฎเชฆเชฆ เช•เชฐเซ€. เช† เช˜เชŸเช• เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ€ เชœเซ‡เชฎ เชœ เชธเชฐเซเชตเชฐ เชชเชฐ เชœเชฎเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชคเซ‡เชฅเซ€, เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช•เชนเซ€เช เชคเซ‹, เชคเซ‡ เช•เชฐเชตเชพเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ€ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชตเซเชฏเชตเชนเชพเชฐเชฟเช• เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€, เชœเซ‡เชฅเซ€ เชคเซ‡ เชเช• เชœ เชธเชฐเซเชตเชฐ เชชเชฐ เชœเชฎเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เช…เชฒเช— เชธเชฐเซเชตเชฐเซเชธ เช‰เชคเซเชชเชจเซเชจ เชจ เชฅเชพเชฏ. เช…เชฎเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชพเชฅเซ‡ เช•เซ‹เชˆเชชเชฃ เชจเชฟเชทเซเชซเชณเชคเชพ เช…เชฅเชตเชพ เชธเช‚เชธเชพเชงเชจ เชคเช•เชฐเชพเชฐเชจเซเช‚ เช…เชตเชฒเซ‹เช•เชจ เช•เชฐเซเชฏเซเช‚ เชจเชฅเซ€. เชตเชงเซเชฎเชพเช‚, เช เชจเซ‹เช‚เชงเชตเซเช‚ เชœเซ‹เช‡เช เช•เซ‡ เชชเซเชฒเช—เช‡เชจเชฎเชพเช‚ เชญเซ‚เชฒเซ‹เชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชซเชฐเซ€เชฅเซ€ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชตเชพเชจเซ€ เชชเชฆเซเชงเชคเชฟ เช›เซ‡. เช…เชจเซ‡ เชญเซ‚เชฒเซ‹เชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชชเซเชฒเช—เช‡เชจ เชกเซ‡เชŸเชพเชจเชพ เชฌเซ‡เชšเชจเซ‡ เชกเชฟเชธเซเช• เชชเชฐ เชฒเช–เซ‡ เช›เซ‡ เชœเซ‡ เชฆเชพเช–เชฒ เช•เชฐเซ€ เชถเช•เชพเชคเซเช‚ เชจเชฅเซ€ (เชซเชพเช‡เชฒ เชซเซ‹เชฐเซเชฎเซ‡เชŸ เช…เชจเซเช•เซ‚เชณ เช›เซ‡: เชธเช‚เชชเชพเชฆเชจ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เชคเชฎเซ‡ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ-เช•เซเชฒเชพเชฏเชจเซเชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ เชธเซเชงเชพเชฐเซ‡เชฒ เชฌเซ‡เชš เชฆเชพเช–เชฒ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹).

เชฏเซ‹เชœเชจเชพเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เชธเซ‰เชซเซเชŸเชตเซ‡เชฐเชจเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซ‚เชšเชฟ เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชชเซเชฐเชธเซเชคเซเชค เช›เซ‡:

เชตเชชเชฐเชพเชฏเซ‡เชฒ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐเชจเซ€ เชฏเชพเชฆเซ€

เชถเซ€เชฐเซเชทเช•

เชตเชฐเซเชฃเชจ

เชตเชฟเชคเชฐเชฃ เชฒเชฟเช‚เช•

เชเชจเชœเซ€เช†เชˆเชเชจเชเช•เซเชธ

เชชเซ‹เชฐเซเชŸ เชฆเซเชตเชพเชฐเชพ เชเช•เซเชธเซ‡เชธเชจเซ‡ เชชเซเชฐเชคเชฟเชฌเช‚เชงเชฟเชค เช•เชฐเชตเชพ เช…เชจเซ‡ เช…เชงเชฟเช•เซƒเชคเชคเชพ เช—เซ‹เช เชตเชตเชพ เชฎเชพเชŸเซ‡ เชฐเชฟเชตเชฐเซเชธ-เชชเซเชฐเซ‹เช•เซเชธเซ€

เชนเชพเชฒเชฎเชพเช‚ เชฏเซ‹เชœเชจเชพเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช— เชฅเชคเซ‹ เชจเชฅเซ€

https://nginx.org/ru/download.html

https://nginx.org/download/nginx-1.16.0.tar.gz

เชซเชพเช‡เชฒเชฌเซ€เชŸ

เชซเชพเช‡เชฒ เชฒเซ‰เช—เซเชธเชจเซเช‚ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ.

https://www.elastic.co/downloads/beats/filebeat (เชตเชฟเชจเซเชกเซ‹เช 64 เชฌเซ€เชŸ เชฎเชพเชŸเซ‡ เชตเชฟเชคเชฐเชฃ เช•เซ€เชŸ).

https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.0-windows-x86_64.zip

logstash

เชฒเซ‹เช— เช•เชฒเซ‡เช•เซเชŸเชฐ.

FileBeat เชฎเชพเช‚เชฅเซ€ เชฒเซ‹เช— เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ เชคเซ‡เชฎเชœ RabbitMQ เช•เชคเชพเชฐเชฎเชพเช‚เชฅเซ€ เชฒเซ‹เช— เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเชชเชฐเชพเชฏ เช›เซ‡ (DMZ เชฎเชพเช‚ เชนเซ‹เชฏ เชคเซ‡เชตเชพ เชธเชฐเซเชตเชฐเซเชธ เชฎเชพเชŸเซ‡.)

https://www.elastic.co/products/logstash

https://artifacts.elastic.co/downloads/logstash/logstash-7.0.1.rpm

เชฒเซ‹เช—เชธเซเชŸเซ‡เชถ-เช†เช‰เชŸเชชเซเชŸ-เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ

เชฌเซ…เชšเซ‡เชธเชฎเชพเช‚ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชฒเซ‰เช—เซเชธ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฒเซ‹เช—เชธเซเชŸเซ…เชถ เชชเซเชฒเช—เช‡เชจ

https://github.com/mikechris/logstash-output-clickhouse

/usr/share/logstash/bin/logstash-plugin logstash-output-clickhouse เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹

/usr/share/logstash/bin/logstash-plugin logstash-filter-prune เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹

/usr/share/logstash/bin/logstash-plugin logstash-filter-multiline เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹

เช•เซเชฒเซ€เช•เชนเชพเช‰เชธ

เชฒเซ‹เช— เชธเซเชŸเซ‹เชฐเซ‡เชœ https://clickhouse.yandex/docs/ru/

https://packagecloud.io/Altinity/clickhouse/packages/el/7/clickhouse-server-19.5.3.8-1.el7.x86_64.rpm

https://packagecloud.io/Altinity/clickhouse/packages/el/7/clickhouse-client-19.5.3.8-1.el7.x86_64.rpm

เชจเซ‰เซ…เชง. เช“เช—เชธเซเชŸ 2018 เชฅเซ€ เชถเชฐเซ‚ เช•เชฐเซ€เชจเซ‡, RHEL เชฎเชพเชŸเซ‡ "เชธเชพเชฎเชพเชจเซเชฏ" rpm เชฌเชฟเชฒเซเชกเซเชธ Yandex เชญเช‚เชกเชพเชฐเชฎเชพเช‚ เชฆเซ‡เช–เชพเชฏเชพ, เชœเซ‡เชฅเซ€ เชคเชฎเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€ เชถเช•เซ‹. เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชธเชฎเชฏเซ‡, เช…เชฎเซ‡ Altinity เชฆเซเชตเชพเชฐเชพ เชฌเชพเช‚เชงเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒเชพ เชชเซ‡เช•เซ‡เชœเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เชนเชคเชพ.

เช—เซเชฐเชพเชซเชจเชพ

เชฒเซ‹เช— เชตเชฟเชเซเชฏเซเชฒเชพเช‡เชเซ‡เชถเชจ. เชกเซ‡เชถเชฌเซ‹เชฐเซเชก เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช

https://grafana.com/

https://grafana.com/grafana/download

Redhat & Centos(64 Bit) - เชจเชตเซ€เชจเชคเชฎ เชธเช‚เชธเซเช•เชฐเชฃ

Grafana 4.6+ เชฎเชพเชŸเซ‡ เชนเชพเช‰เชธ เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชกเซ‡เชŸเชพ เชธเซเชคเซเชฐเซ‹เชค เชธเชพเชฅเซ‡ เช—เซเชฐเชพเชซเชจเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจ

https://grafana.com/plugins/vertamedia-clickhouse-datasource

https://grafana.com/api/plugins/vertamedia-clickhouse-datasource/versions/1.8.1/download

logstash

FileBeat เชฅเซ€ RabbitMQ เช•เชคเชพเชฐเชฎเชพเช‚ เชฐเชพเช‰เชŸเชฐ เชฒเซ‹เช— เช•เชฐเซ‹.

เชจเซ‰เซ…เชง. เช•เชฎเชจเชธเซ€เชฌเซ‡, FileBeat เชชเชพเชธเซ‡ RabbitMQ เชชเชฐ เชธเซ€เชงเซเช‚ เช†เช‰เชŸเชชเซเชŸ เชจเชฅเซ€, เชคเซ‡เชฅเซ€ Logstash เชจเชพ เชฐเซ‚เชชเชฎเชพเช‚ เชฎเชงเซเชฏเชตเชฐเซเชคเซ€ เชฒเชฟเช‚เช• เชœเชฐเซ‚เชฐเซ€ เช›เซ‡.

https://www.elastic.co/products/logstash

https://artifacts.elastic.co/downloads/logstash/logstash-7.0.1.rpm

เชฐเซ‡เชฌเชฟเชŸเชฎเซเชฏเซเช•เซเชฏเซ

เชธเช‚เชฆเซ‡เชถ เช•เชคเชพเชฐ. เช† DMZ เชฎเชพเช‚ เชฒเซ‹เช— เชฌเชซเชฐ เช›เซ‡

https://www.rabbitmq.com/download.html

https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.14/rabbitmq-server-3.7.14-1.el7.noarch.rpm

Erlang เชฐเชจเชŸเชพเช‡เชฎ (RabbitMQ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€)

Erlang เชฐเชจเชŸเชพเช‡เชฎ. RabbitMQ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡

http://www.erlang.org/download.html

https://www.rabbitmq.com/install-rpm.html#install-erlang http://www.erlang.org/downloads/21.3

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชพเชฅเซ‡ เชธเชฐเซเชตเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชจเซ€เชšเซ‡เชจเชพ เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชชเซเชฐเชธเซเชคเซเชค เช›เซ‡:

เชถเซ€เชฐเซเชทเช•

เช•เชฟเช‚เชฎเชค

เชจเซ‹เช‚เชงเชฃเซ€

เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ

HDD: 40GB
เชฐเซ‡เชฎ: 8GB
เชชเซเชฐเซ‹เชธเซ‡เชธเชฐ: เช•เซ‹เชฐ 2 2 เช—เซ€เช—เชพเชนเชฐเซเชŸเซเช

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเชพ เชธเช‚เชšเชพเชฒเชจ เชฎเชพเชŸเซ‡เชจเซ€ เชŸเซ€เชชเซเชธ เชชเชฐ เชงเซเชฏเชพเชจ เช†เชชเชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡ (https://clickhouse.yandex/docs/ru/operations/tips/)

เชธเชพเชฎเชพเชจเซเชฏ เชธเชฟเชธเซเชŸเชฎ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ

OS: Red Hat Enterprise Linux เชธเชฐเซเชตเชฐ (Maipo)

JRE (Java 8)

 

เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เช† เชเช• เชธเชพเชฎเชพเชจเซเชฏ เชตเชฐเซเช•เชธเซเชŸเซ‡เชถเชจ เช›เซ‡.

เชฒเซ‹เช— เชธเซเชŸเซ‹เชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชทเซเชŸเช•เชจเซ€ เชฐเชšเชจเชพ เชจเซ€เชšเซ‡ เชฎเซเชœเชฌ เช›เซ‡:

log_web.sql

CREATE TABLE log_web (
  logdate Date,
  logdatetime DateTime CODEC(Delta, LZ4HC),
   
  fld_log_file_name LowCardinality( String ),
  fld_server_name LowCardinality( String ),
  fld_app_name LowCardinality( String ),
  fld_app_module LowCardinality( String ),
  fld_website_name LowCardinality( String ),
 
  serverIP LowCardinality( String ),
  method LowCardinality( String ),
  uriStem String,
  uriQuery String,
  port UInt32,
  username LowCardinality( String ),
  clientIP String,
  clientRealIP String,
  userAgent String,
  referer String,
  response String,
  subresponse String,
  win32response String,
  timetaken UInt64
   
  , uriQuery__utm_medium String
  , uriQuery__utm_source String
  , uriQuery__utm_campaign String
  , uriQuery__utm_term String
  , uriQuery__utm_content String
  , uriQuery__yclid String
  , uriQuery__region String
 
) Engine = MergeTree()
PARTITION BY toYYYYMM(logdate)
ORDER BY (fld_app_name, fld_app_module, logdatetime)
SETTINGS index_granularity = 8192;

เช…เชฎเซ‡ เชกเชฟเชซเซ‰เชฒเซเชŸ เชชเชพเชฐเซเชŸเซ€เชถเชจ (เชฎเชนเชฟเชจเชพ เชฆเซเชตเชพเชฐเชพ) เช…เชจเซ‡ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ เช—เซเชฐเซ‡เชจเซเชฏเซเชฒเชพเชฐเชฟเชŸเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช. เชฌเชงเชพ เช•เซเชทเซ‡เชคเซเชฐเซ‹ เชตเซเชฏเชตเชนเชพเชฐเซ€เช• เชฐเซ€เชคเซ‡ HTTP เชตเชฟเชจเช‚เชคเซ€เช“เชจเซ‡ เชฒเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ IIS เชฒเซ‹เช— เชเชจเซเชŸเซเชฐเซ€เช“เชจเซ‡ เช…เชจเซเชฐเซ‚เชช เช›เซ‡. เช…เชฒเช—เชฅเซ€, เช…เชฎเซ‡ เชจเซ‹เช‚เชงเซ€เช เช›เซ€เช เช•เซ‡ เชฏเซเชŸเซ€เชเชฎ-เชŸเซ‡เช—เซเชธ เชธเซเชŸเซ‹เชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฒเช— เชซเซ€เชฒเซเชกเซเชธ เช›เซ‡ (เชคเซ‡เช“ เช•เซเชตเซ‡เชฐเซ€ เชธเซเชŸเซเชฐเชฟเช‚เช— เชซเซ€เชฒเซเชกเชฎเชพเช‚เชฅเซ€ เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชฆเชพเช–เชฒ เช•เชฐเชตเชพเชจเชพ เชคเชฌเช•เซเช•เซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเชฟเชค เชฅเชพเชฏ เช›เซ‡).

เช‰เชชเชฐเชพเช‚เชค, เชธเชฟเชธเซเชŸเชฎเซ‹, เช˜เชŸเช•เซ‹, เชธเชฐเซเชตเชฐเซเชธ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เช˜เชฃเชพ เชธเชฟเชธเซเชŸเชฎ เชซเซ€เชฒเซเชก เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡. เช† เช•เซเชทเซ‡เชคเซเชฐเซ‹เชจเชพ เชตเชฐเซเชฃเชจ เชฎเชพเชŸเซ‡ เชจเซ€เชšเซ‡เชจเซเช‚ เช•เซ‹เชทเซเชŸเช• เชœเซเช“. เชเช• เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚, เช…เชฎเซ‡ เช˜เชฃเซ€ เชธเชฟเชธเซเชŸเชฎเซ‹ เชฎเชพเชŸเซ‡ เชฒเซ‹เช— เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเซ€เช เช›เซ€เช.

เชถเซ€เชฐเซเชทเช•

เชตเชฐเซเชฃเชจ

เช‰เชฆเชพเชนเชฐเชฃ:

fld_app_เชจเชพเชฎ

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ/เชธเชฟเชธเซเชŸเชฎเชจเซเช‚ เชจเชพเชฎ
เชฎเชพเชจเซเชฏ เชฎเซ‚เชฒเซเชฏเซ‹:

  • site1.domain.com เชฌเชพเชนเซเชฏ เชธเชพเช‡เชŸ 1
  • site2.domain.com เชฌเชพเชนเซเชฏ เชธเชพเช‡เชŸ 2
  • internal-site1.domain.local เช†เช‚เชคเชฐเชฟเช• เชธเชพเชˆเชŸ 1

site1.domain.com

fld_app_module

เชธเชฟเชธเซเชŸเชฎ เชฎเซ‹เชกเซเชฏเซเชฒ
เชฎเชพเชจเซเชฏ เชฎเซ‚เชฒเซเชฏเซ‹:

  • เชตเซ‡เชฌ - เชตเซ‡เชฌเชธเชพเช‡เชŸ
  • svc - เชตเซ‡เชฌ เชธเชพเช‡เชŸ เชธเซ‡เชตเชพ
  • intgr - เชเช•เซ€เช•เชฐเชฃ เชตเซ‡เชฌ เชธเซ‡เชตเชพ
  • bo - เชเชกเชฎเชฟเชจ (เชฌเซ‡เช•เช“เชซเชฟเชธ)

เชตเซ‡เชฌ

fld_website_name

IIS เชฎเชพเช‚ เชธเชพเช‡เชŸเชจเซเช‚ เชจเชพเชฎ

เชเช• เชธเชฐเซเชตเชฐ เชชเชฐ เช…เชจเซ‡เช• เชธเชฟเชธเซเชŸเชฎเซ‹ เชœเชฎเชพเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡, เช…เชฅเชตเชพ เชคเซ‹ เชเช• เชธเชฟเชธเซเชŸเชฎ เชฎเซ‹เชกเซเชฏเซเชฒเชจเชพ เช…เชจเซ‡เช• เช‰เชฆเชพเชนเชฐเชฃเซ‹

เชตเซ‡เชฌ เชฎเซเช–เซเชฏ

fld_server_name

เชธเชฐเซเชตเชฐ เชจเชพเชฎ

web1.domain.com

fld_log_file_name

เชธเชฐเซเชตเชฐ เชชเชฐ เชฒเซ‹เช— เชซเชพเช‡เชฒเชจเซ‹ เชชเชพเชฅ

C:inetpublogsLogFiles
W3SVC1u_ex190711.log

เช† เชคเชฎเชจเซ‡ เช—เซเชฐเชพเชซเชจเชพเชฎเชพเช‚ เช…เชธเชฐเช•เชพเชฐเช• เชฐเซ€เชคเซ‡ เช—เซเชฐเชพเชซ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชšเซ‹เช•เซเช•เชธ เชธเชฟเชธเซเชŸเชฎเชจเชพ เช…เช—เซเชฐเชญเชพเช—เชฎเชพเช‚เชฅเซ€ เชตเชฟเชจเช‚เชคเซ€เช“ เชœเซเช“. เช† Yandex.Metrica เชฎเชพเช‚ เชธเชพเช‡เชŸ เช•เชพเช‰เชจเซเชŸเชฐ เชœเซ‡เชตเซเช‚ เชœ เช›เซ‡.

เช…เชนเซ€เช‚ เชฌเซ‡ เชฎเชนเชฟเชจเชพ เชฎเชพเชŸเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเชพ เช‰เชชเชฏเซ‹เช— เช…เช‚เช—เซ‡เชจเชพ เช•เซ‡เชŸเชฒเชพเช• เช†เช‚เช•เชกเชพ เช›เซ‡.

เชธเชฟเชธเซเชŸเชฎเซ‹ เช…เชจเซ‡ เชคเซ‡เชฎเชจเชพ เช˜เชŸเช•เซ‹ เชฆเซเชตเชพเชฐเชพ เชคเซ‚เชŸเซ€ เช—เชฏเซ‡เชฒเชพ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธเชจเซ€ เชธเช‚เช–เซเชฏเชพ

SELECT
    fld_app_name,
    fld_app_module,
    count(fld_app_name) AS rows_count
FROM log_web
GROUP BY
    fld_app_name,
    fld_app_module
    WITH TOTALS
ORDER BY
    fld_app_name ASC,
    rows_count DESC
 
โ”Œโ”€fld_app_nameโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€fld_app_moduleโ”€โ”ฌโ”€rows_countโ”€โ”
โ”‚ site1.domain.ru  โ”‚ web            โ”‚     131441 โ”‚
โ”‚ site2.domain.ru  โ”‚ web            โ”‚    1751081 โ”‚
โ”‚ site3.domain.ru  โ”‚ web            โ”‚  106887543 โ”‚
โ”‚ site3.domain.ru  โ”‚ svc            โ”‚   44908603 โ”‚
โ”‚ site3.domain.ru  โ”‚ intgr          โ”‚    9813911 โ”‚
โ”‚ site4.domain.ru  โ”‚ web            โ”‚     772095 โ”‚
โ”‚ site5.domain.ru  โ”‚ web            โ”‚   17037221 โ”‚
โ”‚ site5.domain.ru  โ”‚ intgr          โ”‚     838559 โ”‚
โ”‚ site5.domain.ru  โ”‚ bo             โ”‚       7404 โ”‚
โ”‚ site6.domain.ru  โ”‚ web            โ”‚     595877 โ”‚
โ”‚ site7.domain.ru  โ”‚ web            โ”‚   27778858 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
 
Totals:
โ”Œโ”€fld_app_nameโ”€โ”ฌโ”€fld_app_moduleโ”€โ”ฌโ”€rows_countโ”€โ”
โ”‚              โ”‚                โ”‚  210522593 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
 
11 rows in set. Elapsed: 4.874 sec. Processed 210.52 million rows, 421.67 MB (43.19 million rows/s., 86.51 MB/s.)

เชกเชฟเชธเซเช• เชชเชฐ เชกเซ‡เชŸเชพเชจเซ‹ เชœเชฅเซเชฅเซ‹

SELECT
    formatReadableSize(sum(data_uncompressed_bytes)) AS uncompressed,
    formatReadableSize(sum(data_compressed_bytes)) AS compressed,
    sum(rows) AS total_rows
FROM system.parts
WHERE table = 'log_web'
 
โ”Œโ”€uncompressedโ”€โ”ฌโ”€compressedโ”€โ”ฌโ”€total_rowsโ”€โ”
โ”‚ 54.50 GiB    โ”‚ 4.86 GiB   โ”‚  211427094 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
 
1 rows in set. Elapsed: 0.035 sec.

เช•เซ‰เชฒเชฎเชฎเชพเช‚ เชกเซ‡เชŸเชพ เช•เชฎเซเชชเซเชฐเซ‡เชถเชจเชจเซ€ เชกเชฟเช—เซเชฐเซ€

SELECT
    name,
    formatReadableSize(data_uncompressed_bytes) AS uncompressed,
    formatReadableSize(data_compressed_bytes) AS compressed,
    data_uncompressed_bytes / data_compressed_bytes AS compress_ratio
FROM system.columns
WHERE table = 'log_web'
 
โ”Œโ”€nameโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€uncompressedโ”€โ”ฌโ”€compressedโ”€โ”ฌโ”€โ”€โ”€โ”€โ”€compress_ratioโ”€โ”
โ”‚ logdate                โ”‚ 401.53 MiB   โ”‚ 1.80 MiB   โ”‚ 223.16665968777315 โ”‚
โ”‚ logdatetime            โ”‚ 803.06 MiB   โ”‚ 35.91 MiB  โ”‚ 22.363966401202305 โ”‚
โ”‚ fld_log_file_name      โ”‚ 220.66 MiB   โ”‚ 2.60 MiB   โ”‚  84.99905736932571 โ”‚
โ”‚ fld_server_name        โ”‚ 201.54 MiB   โ”‚ 50.63 MiB  โ”‚  3.980924816977078 โ”‚
โ”‚ fld_app_name           โ”‚ 201.17 MiB   โ”‚ 969.17 KiB โ”‚ 212.55518183686877 โ”‚
โ”‚ fld_app_module         โ”‚ 201.17 MiB   โ”‚ 968.60 KiB โ”‚ 212.67805817411906 โ”‚
โ”‚ fld_website_name       โ”‚ 201.54 MiB   โ”‚ 1.24 MiB   โ”‚  162.7204926761546 โ”‚
โ”‚ serverIP               โ”‚ 201.54 MiB   โ”‚ 50.25 MiB  โ”‚  4.010824061219731 โ”‚
โ”‚ method                 โ”‚ 201.53 MiB   โ”‚ 43.64 MiB  โ”‚  4.617721053304486 โ”‚
โ”‚ uriStem                โ”‚ 5.13 GiB     โ”‚ 832.51 MiB โ”‚  6.311522291936919 โ”‚
โ”‚ uriQuery               โ”‚ 2.58 GiB     โ”‚ 501.06 MiB โ”‚  5.269731450124478 โ”‚
โ”‚ port                   โ”‚ 803.06 MiB   โ”‚ 3.98 MiB   โ”‚ 201.91673864241824 โ”‚
โ”‚ username               โ”‚ 318.08 MiB   โ”‚ 26.93 MiB  โ”‚ 11.812513794583598 โ”‚
โ”‚ clientIP               โ”‚ 2.35 GiB     โ”‚ 82.59 MiB  โ”‚ 29.132328640073343 โ”‚
โ”‚ clientRealIP           โ”‚ 2.49 GiB     โ”‚ 465.05 MiB โ”‚  5.478382297052563 โ”‚
โ”‚ userAgent              โ”‚ 18.34 GiB    โ”‚ 764.08 MiB โ”‚  24.57905114484208 โ”‚
โ”‚ referer                โ”‚ 14.71 GiB    โ”‚ 1.37 GiB   โ”‚ 10.736792723669906 โ”‚
โ”‚ response               โ”‚ 803.06 MiB   โ”‚ 83.81 MiB  โ”‚  9.582334090987247 โ”‚
โ”‚ subresponse            โ”‚ 399.87 MiB   โ”‚ 1.83 MiB   โ”‚  218.4831068635027 โ”‚
โ”‚ win32response          โ”‚ 407.86 MiB   โ”‚ 7.41 MiB   โ”‚ 55.050315514606815 โ”‚
โ”‚ timetaken              โ”‚ 1.57 GiB     โ”‚ 402.06 MiB โ”‚ 3.9947395692010637 โ”‚
โ”‚ uriQuery__utm_medium   โ”‚ 208.17 MiB   โ”‚ 12.29 MiB  โ”‚ 16.936148912472955 โ”‚
โ”‚ uriQuery__utm_source   โ”‚ 215.18 MiB   โ”‚ 13.00 MiB  โ”‚ 16.548367623199912 โ”‚
โ”‚ uriQuery__utm_campaign โ”‚ 381.46 MiB   โ”‚ 37.94 MiB  โ”‚ 10.055156353418509 โ”‚
โ”‚ uriQuery__utm_term     โ”‚ 231.82 MiB   โ”‚ 10.78 MiB  โ”‚ 21.502540454070672 โ”‚
โ”‚ uriQuery__utm_content  โ”‚ 441.34 MiB   โ”‚ 87.60 MiB  โ”‚  5.038260760449327 โ”‚
โ”‚ uriQuery__yclid        โ”‚ 216.88 MiB   โ”‚ 16.58 MiB  โ”‚  13.07721335008116 โ”‚
โ”‚ uriQuery__region       โ”‚ 204.35 MiB   โ”‚ 9.49 MiB   โ”‚  21.52661903446796 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
 
28 rows in set. Elapsed: 0.005 sec.

เชตเชชเชฐเชพเชฏเซ‡เชฒ เช˜เชŸเช•เซ‹เชจเซเช‚ เชตเชฐเซเชฃเชจ

เชซเชพเช‡เชฒเชฌเซ€เชŸ. เชซเชพเช‡เชฒ เชฒเซ‰เช—เซเชธ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช

เช† เช˜เชŸเช• เชกเชฟเชธเซเช• เชชเชฐเชจเซ€ เชฒเซ‹เช— เชซเชพเชˆเชฒเซ‹เชฎเชพเช‚ เชฅเชคเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ‡ เชŸเซเชฐเซ‡เช• เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชฎเชพเชนเชฟเชคเซ€เชจเซ‡ LogStash เชจเซ‡ เชชเชธเชพเชฐ เช•เชฐเซ‡ เช›เซ‡. เชฌเชงเชพ เชธเชฐเซเชตเชฐเซเชธ เชชเชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒเซเช‚ เช›เซ‡ เชœเซเชฏเชพเช‚ เชฒเซ‹เช— เชซเชพเช‡เชฒเซ‹ เชฒเช–เซ‡เชฒเซ€ เชนเซ‹เชฏ เช›เซ‡ (เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ IIS). เชŸเซ‡เชฒ เชฎเซ‹เชกเชฎเชพเช‚ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ (เชเชŸเชฒเซ‡ โ€‹โ€‹โ€‹โ€‹เช•เซ‡ เชซเชพเช‡เชฒเชฎเชพเช‚ เชซเช•เซเชค เช‰เชฎเซ‡เชฐเชพเชฏเซ‡เชฒ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡). เชชเชฐเช‚เชคเซ เช…เชฒเช—เชฅเซ€ เชคเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เชซเชพเช‡เชฒเซ‹เชจเซ‡ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช—เซ‹เช เชตเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเชพเชฐเซ‡ เชชเชพเช›เชฒเชพ เชฎเชนเชฟเชจเชพเชจเซ‹ เชกเซ‡เชŸเชพ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เช† เช‰เชชเชฏเซ‹เช—เซ€ เช›เซ‡. เชซเช•เซเชค เชฒเซ‹เช— เชซเชพเช‡เชฒเชจเซ‡ เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เชฎเซ‚เช•เซ‹ เช…เชจเซ‡ เชคเซ‡ เชคเซ‡เชจเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เชฐเซ€เชคเซ‡ เชตเชพเช‚เชšเชถเซ‡.

เชœเซเชฏเชพเชฐเซ‡ เชธเซ‡เชตเชพ เชฌเช‚เชง เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชกเซ‡เชŸเชพ เชตเชงเซ เชธเซเชŸเซ‹เชฐเซ‡เชœเชฎเชพเช‚ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เชฅเชคเซ‹ เชจเชฅเซ€.

เช‰เชฆเชพเชนเชฐเชฃ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡:

filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - C:/inetpub/logs/LogFiles/W3SVC1/*.log
  exclude_files: ['.gz$','.zip$']
  tail_files: true
  ignore_older: 24h
  fields:
    fld_server_name: "site1.domain.ru"
    fld_app_name: "site1.domain.ru"
    fld_app_module: "web"
    fld_website_name: "web-main"
 
- type: log
  enabled: true
  paths:
    - C:/inetpub/logs/LogFiles/__Import/access_log-*
  exclude_files: ['.gz$','.zip$']
  tail_files: false
  fields:
    fld_server_name: "site2.domain.ru"
    fld_app_name: "site2.domain.ru"
    fld_app_module: "web"
    fld_website_name: "web-main"
    fld_logformat: "logformat__apache"
 
 
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
  reload.period: 2s
 
output.logstash:
  hosts: ["log.domain.com:5044"]
 
  ssl.enabled: true
  ssl.certificate_authorities: ["C:/filebeat/certs/ca.pem", "C:/filebeat/certs/ca-issuing.pem"]
  ssl.certificate: "C:/filebeat/certs/site1.domain.ru.cer"
  ssl.key: "C:/filebeat/certs/site1.domain.ru.key"
 
#================================ Processors =====================================
 
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

logstash เชฒเซ‹เช— เช•เชฒเซ‡เช•เซเชŸเชฐ

เช† เช˜เชŸเช•เชจเซ‡ FileBeat (เช…เชฅเชตเชพ RabbitMQ เช•เชคเชพเชฐ เชฆเซเชตเชพเชฐเชพ) เชฎเชพเช‚เชฅเซ€ เชฒเซ‹เช— เชเชจเซเชŸเซเชฐเซ€เช“ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชฌเซ‡เชšเชจเซ‡ เชชเชพเชฐเซเชธเชฟเช‚เช— เช…เชจเซ‡ เชฆเชพเช–เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชกเชฟเชเชพเช‡เชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡.

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธเชฎเชพเช‚ เชฆเชพเช–เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชฒเซ‹เช—เชธเซเชŸเซ‡เชถ-เช†เช‰เชŸเชชเซเชŸ-เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชชเซเชฒเช—เช‡เชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡. Logstash เชชเซเชฒเช—เช‡เชจเชฎเชพเช‚ เชตเชฟเชจเช‚เชคเซ€ เชชเซเชจเชƒเชชเซเชฐเชฏเชพเชธ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎ เช›เซ‡, เชชเชฐเช‚เชคเซ เชจเชฟเชฏเชฎเชฟเชค เชถเชŸเชกเชพเช‰เชจ เชธเชพเชฅเซ‡, เชธเซ‡เชตเชพเชจเซ‡ เชฌเช‚เชง เช•เชฐเชตเซ€ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เชฌเช‚เชง เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชธเช‚เชฆเซ‡เชถเชพเช“ RabbitMQ เช•เชคเชพเชฐเชฎเชพเช‚ เชธเช‚เชšเชฟเชค เชฅเชถเซ‡, เชคเซ‡เชฅเซ€ เชœเซ‹ เชธเซเชŸเซ‹เชช เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏ เชฎเชพเชŸเซ‡ เช›เซ‡, เชคเซ‹ เชธเชฐเซเชตเชฐเซเชธ เชชเชฐ เชซเชพเช‡เชฒเชฌเซ€เชŸเซเชธเชจเซ‡ เชฌเช‚เชง เช•เชฐเชตเซเช‚ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡. เชเชตเซ€ เชธเซเช•เซ€เชฎเชฎเชพเช‚ เชœเซเชฏเชพเช‚ RabbitMQ เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชคเซ‹ เชจเชฅเซ€ (เชธเซเชฅเชพเชจเชฟเช• เชจเซ‡เชŸเชตเชฐเซเช• เชชเชฐ, Filebeat เชธเซ€เชงเชพ เชœ Logstash เชชเชฐ เชฒเซ‹เช— เชฎเซ‹เช•เชฒเซ‡ เช›เซ‡), Filebeats เชคเชฆเซเชฆเชจ เชธเซเชตเซ€เช•เชพเชฐเซเชฏ เช…เชจเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เชคเซ‡เชฅเซ€ เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡ เช†เช‰เชŸเชชเซเชŸเชจเซ€ เช…เชจเซเชชเชฒเชฌเซเชงเชคเชพ เชชเชฐเชฟเชฃเชพเชฎ เชตเชฟเชจเชพ เชชเชธเชพเชฐ เชฅเชพเชฏ เช›เซ‡.

เช‰เชฆเชพเชนเชฐเชฃ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡:

log_web__filebeat_clickhouse.conf

input {
 
    beats {
        port => 5044
        type => 'iis'
        ssl => true
        ssl_certificate_authorities => ["/etc/logstash/certs/ca.cer", "/etc/logstash/certs/ca-issuing.cer"]
        ssl_certificate => "/etc/logstash/certs/server.cer"
        ssl_key => "/etc/logstash/certs/server-pkcs8.key"
        ssl_verify_mode => "peer"
 
            add_field => {
                "fld_server_name" => "%{[fields][fld_server_name]}"
                "fld_app_name" => "%{[fields][fld_app_name]}"
                "fld_app_module" => "%{[fields][fld_app_module]}"
                "fld_website_name" => "%{[fields][fld_website_name]}"
                "fld_log_file_name" => "%{source}"
                "fld_logformat" => "%{[fields][fld_logformat]}"
            }
    }
 
    rabbitmq {
        host => "queue.domain.com"
        port => 5671
        user => "q-reader"
        password => "password"
        queue => "web_log"
        heartbeat => 30
        durable => true
        ssl => true
        #ssl_certificate_path => "/etc/logstash/certs/server.p12"
        #ssl_certificate_password => "password"
 
        add_field => {
            "fld_server_name" => "%{[fields][fld_server_name]}"
            "fld_app_name" => "%{[fields][fld_app_name]}"
            "fld_app_module" => "%{[fields][fld_app_module]}"
            "fld_website_name" => "%{[fields][fld_website_name]}"
            "fld_log_file_name" => "%{source}"
            "fld_logformat" => "%{[fields][fld_logformat]}"
        }
    }
 
}
 
filter { 
 
      if [message] =~ "^#" {
        drop {}
      }
 
      if [fld_logformat] == "logformat__iis_with_xrealip" {
     
          grok {
            match => ["message", "%{TIMESTAMP_ISO8601:log_timestamp} %{IP:serverIP} %{WORD:method} %{NOTSPACE:uriStem} %{NOTSPACE:uriQuery} %{NUMBER:port} %{NOTSPACE:username} %{IPORHOST:clientIP} %{NOTSPACE:userAgent} %{NOTSPACE:referer} %{NUMBER:response} %{NUMBER:subresponse} %{NUMBER:win32response} %{NUMBER:timetaken} %{NOTSPACE:xrealIP} %{NOTSPACE:xforwarderfor}"]
          }
      } else {
   
          grok {
             match => ["message", "%{TIMESTAMP_ISO8601:log_timestamp} %{IP:serverIP} %{WORD:method} %{NOTSPACE:uriStem} %{NOTSPACE:uriQuery} %{NUMBER:port} %{NOTSPACE:username} %{IPORHOST:clientIP} %{NOTSPACE:userAgent} %{NOTSPACE:referer} %{NUMBER:response} %{NUMBER:subresponse} %{NUMBER:win32response} %{NUMBER:timetaken}"]
          }
 
      }
 
      date {
        match => [ "log_timestamp", "YYYY-MM-dd HH:mm:ss" ]
          timezone => "Etc/UTC"
        remove_field => [ "log_timestamp", "@timestamp" ]
        target => [ "log_timestamp2" ]
      }
 
        ruby {
            code => "tstamp = event.get('log_timestamp2').to_i
                        event.set('logdatetime', Time.at(tstamp).strftime('%Y-%m-%d %H:%M:%S'))
                        event.set('logdate', Time.at(tstamp).strftime('%Y-%m-%d'))"
        }
 
      if [bytesSent] {
        ruby {
          code => "event['kilobytesSent'] = event['bytesSent'].to_i / 1024.0"
        }
      }
 
 
      if [bytesReceived] {
        ruby {
          code => "event['kilobytesReceived'] = event['bytesReceived'].to_i / 1024.0"
        }
      }
 
   
        ruby {
            code => "event.set('clientRealIP', event.get('clientIP'))"
        }
        if [xrealIP] {
            ruby {
                code => "event.set('clientRealIP', event.get('xrealIP'))"
            }
        }
        if [xforwarderfor] {
            ruby {
                code => "event.set('clientRealIP', event.get('xforwarderfor'))"
            }
        }
 
      mutate {
        convert => ["bytesSent", "integer"]
        convert => ["bytesReceived", "integer"]
        convert => ["timetaken", "integer"] 
        convert => ["port", "integer"]
 
        add_field => {
            "clientHostname" => "%{clientIP}"
        }
      }
 
        useragent {
            source=> "useragent"
            prefix=> "browser"
        }
 
        kv {
            source => "uriQuery"
            prefix => "uriQuery__"
            allow_duplicate_values => false
            field_split => "&"
            include_keys => [ "utm_medium", "utm_source", "utm_campaign", "utm_term", "utm_content", "yclid", "region" ]
        }
 
        mutate {
            join => { "uriQuery__utm_source" => "," }
            join => { "uriQuery__utm_medium" => "," }
            join => { "uriQuery__utm_campaign" => "," }
            join => { "uriQuery__utm_term" => "," }
            join => { "uriQuery__utm_content" => "," }
            join => { "uriQuery__yclid" => "," }
            join => { "uriQuery__region" => "," }
        }
 
}
 
output { 
  #stdout {codec => rubydebug}
    clickhouse {
      headers => ["Authorization", "Basic abcdsfks..."]
      http_hosts => ["http://127.0.0.1:8123"]
      save_dir => "/etc/logstash/tmp"
      table => "log_web"
      request_tolerance => 1
      flush_size => 10000
      idle_flush_time => 1
        mutations => {
            "fld_log_file_name" => "fld_log_file_name"
            "fld_server_name" => "fld_server_name"
            "fld_app_name" => "fld_app_name"
            "fld_app_module" => "fld_app_module"
            "fld_website_name" => "fld_website_name"
 
            "logdatetime" => "logdatetime"
            "logdate" => "logdate"
            "serverIP" => "serverIP"
            "method" => "method"
            "uriStem" => "uriStem"
            "uriQuery" => "uriQuery"
            "port" => "port"
            "username" => "username"
            "clientIP" => "clientIP"
            "clientRealIP" => "clientRealIP"
            "userAgent" => "userAgent"
            "referer" => "referer"
            "response" => "response"
            "subresponse" => "subresponse"
            "win32response" => "win32response"
            "timetaken" => "timetaken"
             
            "uriQuery__utm_medium" => "uriQuery__utm_medium"
            "uriQuery__utm_source" => "uriQuery__utm_source"
            "uriQuery__utm_campaign" => "uriQuery__utm_campaign"
            "uriQuery__utm_term" => "uriQuery__utm_term"
            "uriQuery__utm_content" => "uriQuery__utm_content"
            "uriQuery__yclid" => "uriQuery__yclid"
            "uriQuery__region" => "uriQuery__region"
        }
    }
 
}

pipelines.yml

# This file is where you define your pipelines. You can define multiple.
# For more information on multiple pipelines, see the documentation:
#   https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
 
- pipeline.id: log_web__filebeat_clickhouse
  path.config: "/etc/logstash/log_web__filebeat_clickhouse.conf"

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชฒเซ‹เช— เชธเซเชŸเซ‹เชฐเซ‡เชœ

เชฌเชงเซ€ เชธเชฟเชธเซเชŸเชฎเซ‹ เชฎเชพเชŸเซ‡เชจเชพ เชฒเซ‹เช— เชเช• เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เชฅเชพเชฏ เช›เซ‡ (เชฒเซ‡เช–เชจเซ€ เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชœเซเช“). เชคเซ‡ เชตเชฟเชจเช‚เชคเซ€เช“ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเชพเชจเซ‹ เช›เซ‡: เชฌเชงเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชตเชฟเชตเชฟเชง เชซเซ‹เชฐเซเชฎเซ‡เชŸ เชฎเชพเชŸเซ‡ เชธเชฎเชพเชจ เช›เซ‡, เชœเซ‡เชฎ เช•เซ‡ IIS เชฒเซ‹เช—, apache เช…เชจเซ‡ nginx เชฒเซ‹เช—. เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเซ‹เช— เชฎเชพเชŸเซ‡, เชœเซ‡เชฎเชพเช‚, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชญเซ‚เชฒเซ‹, เชฎเชพเชนเชฟเชคเซ€ เชธเช‚เชฆเซ‡เชถเชพเช“, เชšเซ‡เชคเชตเชฃเซ€เช“ เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชฏเซ‹เช—เซเชฏ เชฎเชพเชณเช–เซเช‚ (เชนเชพเชฒเชฎเชพเช‚ เชกเชฟเชเชพเช‡เชจ เชคเชฌเช•เซเช•เซ‡) เชธเชพเชฅเซ‡ เชเช• เช…เชฒเช— เชŸเซ‡เชฌเชฒ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เช•เซ‹เชทเซเชŸเช• เชกเชฟเชเชพเช‡เชจ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เชชเซเชฐเชพเชฅเชฎเชฟเช• เช•เซ€ (เชœเซ‡เชจเชพ เชฆเซเชตเชพเชฐเชพ เชธเซเชŸเซ‹เชฐเซ‡เชœ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชกเซ‡เชŸเชพเชจเซ‡ เชธเซ‰เชฐเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡) เชจเช•เซเช•เซ€ เช•เชฐเชตเซเช‚ เช–เซ‚เชฌ เชœ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡. เชกเซ‡เชŸเชพ เช•เชฎเซเชชเซเชฐเซ‡เชถเชจ เช…เชจเซ‡ เช•เซเชตเซ‡เชฐเซ€ เชธเซเชชเซ€เชกเชจเซ€ เชกเชฟเช—เซเชฐเซ€ เช†เชจเชพ เชชเชฐ เชจเชฟเชฐเซเชญเชฐ เช›เซ‡. เช…เชฎเชพเชฐเชพ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚, เช•เซ€ เช›เซ‡
เชฆเซเชตเชพเชฐเชพ เช“เชฐเซเชกเชฐ เช•เชฐเซ‹ (fld_app_name, fld_app_module, logdatetime)
เชเชŸเชฒเซ‡ เช•เซ‡, เชธเชฟเชธเซเชŸเชฎเชจเชพ เชจเชพเชฎ เชฆเซเชตเชพเชฐเชพ, เชธเชฟเชธเซเชŸเชฎ เช˜เชŸเช•เชจเซเช‚ เชจเชพเชฎ เช…เชจเซ‡ เช˜เชŸเชจเชพเชจเซ€ เชคเชพเชฐเซ€เช–. เชถเชฐเซ‚เช†เชคเชฎเชพเช‚, เช‡เชตเซ‡เชจเซเชŸเชจเซ€ เชคเชพเชฐเซ€เช– เชชเซเชฐเชฅเชฎ เช†เชตเซ€. เชคเซ‡เชจเซ‡ เช›เซ‡เชฒเซเชฒเชพ เชธเซเชฅเชพเชจเซ‡ เช–เชธเซ‡เชกเซเชฏเชพ เชชเช›เซ€, เชชเซเชฐเชถเซเชจเซ‹ เชฒเช—เชญเช— เชฌเชฎเชฃเซ€ เชเชกเชชเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฒเชพเช—เซเชฏเชพ. เชชเซเชฐเชพเชฅเชฎเชฟเช• เช•เซ€ เชฌเชฆเชฒเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชทเซเชŸเช•เชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชฌเชจเชพเชตเชตเชพเชจเซ€ เช…เชจเซ‡ เชกเซ‡เชŸเชพเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชฒเซ‹เชก เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡ เชœเซ‡เชฅเซ€ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชกเชฟเชธเซเช• เชชเชฐเชจเชพ เชกเซ‡เชŸเชพเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เช—เซ‹เช เชตเซ‡. เช† เชเช• เชญเชพเชฐเซ‡ เช“เชชเชฐเซ‡เชถเชจ เช›เซ‡, เชคเซ‡เชฅเซ€ เชธเซ‰เชฐเซเชŸ เช•เซ€เชฎเชพเช‚ เชถเซเช‚ เชธเชฎเชพเชตเชตเซเช‚ เชœเซ‹เชˆเช เชคเซ‡ เชตเชฟเชถเซ‡ เช˜เชฃเซเช‚ เชตเชฟเชšเชพเชฐเชตเซเช‚ เช เชเช• เชธเชพเชฐเซ‹ เชตเชฟเชšเชพเชฐ เช›เซ‡.

เช เชชเชฃ เชจเซ‹เช‚เชงเชตเซเช‚ เชœเซ‹เชˆเช เช•เซ‡ เชฒเซ‹เช•เชพเชฐเซเชกเชฟเชจเซ‡เชฒเชฟเชŸเซ€ เชกเซ‡เชŸเชพ เชชเซเชฐเช•เชพเชฐ เชคเชพเชœเซ‡เชคเชฐเชจเชพ เชธเช‚เชธเซเช•เชฐเชฃเซ‹เชฎเชพเช‚ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช‚ เชฆเซ‡เช–เชพเชฏเซ‹ เช›เซ‡. เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เชธเช‚เช•เซเชšเชฟเชค เชกเซ‡เชŸเชพเชจเซเช‚ เช•เชฆ เชคเซ‡ เช•เซเชทเซ‡เชคเซเชฐเซ‹ เชฎเชพเชŸเซ‡ เชคเซ€เชตเซเชฐเชชเชฃเซ‡ เช˜เชŸเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช•เซ‡ เชœเซ‡เชจเซ€ เชฎเซเช–เซเชฏเชคเชพ เช“เช›เซ€ เชนเซ‹เชฏ เช›เซ‡ (เชฅเซ‹เชกเชพ เชตเชฟเช•เชฒเซเชชเซ‹).

เชธเช‚เชธเซเช•เชฐเชฃ 19.6 เชนเชพเชฒเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เช›เซ‡ เช…เชจเซ‡ เช…เชฎเซ‡ เชจเชตเซ€เชจเชคเชฎ เชธเช‚เชธเซเช•เชฐเชฃ เชชเชฐ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชตเชพเชจเซ€ เชฏเซ‹เชœเชจเชพ เชฌเชจเชพเชตเซ€เช เช›เซ€เช. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชคเซ‡เชฎเชจเซ€ เชชเชพเชธเซ‡ เช…เชจเซเช•เซ‚เชฒเชจเชถเซ€เชฒ เช—เซเชฐเซ‡เชจเซเชฏเซเชฒเชพเชฐเชฟเชŸเซ€, เชธเซเช•เชฟเชชเชฟเช‚เช— เชธเซ‚เชšเช•เชพเช‚เช•เซ‹ เช…เชจเซ‡ เชกเชฌเชฒเชกเซ‡เชฒเซเชŸเชพ เช•เซ‹เชกเซ‡เช• เชœเซ‡เชตเซ€ เช…เชฆเซเชญเซเชค เชธเซเชตเชฟเชงเชพเช“ เช›เซ‡.

เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡, เชธเซเชฅเชพเชชเชจ เชฆเชฐเชฎเซเชฏเชพเชจ, เชฒเซ‹เช—เซ€เช‚เช— เชธเซเชคเชฐ เชŸเซเชฐเซ‡เชธ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเซเชฏเซ‹เชœเชฟเชค เชฅเชฏเซ‡เชฒ เช›เซ‡. เชฒเซ‹เช—เชจเซ‡ เชซเซ‡เชฐเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เช†เชฐเซเช•เชพเช‡เชต เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เชœ เชธเชฎเชฏเซ‡ เชคเซ‡ เช—เซ€เช—เชพเชฌเชพเช‡เชŸ เชธเซเชงเซ€ เชตเชฟเชธเซเชคเชฐเซ‡ เช›เซ‡. เชœเซ‹ เชคเซเชฏเชพเช‚ เช•เซ‹เชˆ เชœเชฐเซ‚เชฐ เชจเชฅเซ€, เชคเซ‹ เชชเช›เซ€ เชคเชฎเซ‡ เชšเซ‡เชคเชตเชฃเซ€ เชธเซเชคเชฐ เชธเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชชเช›เซ€ เชฒเซ‹เช—เชจเซเช‚ เช•เชฆ เชญเชพเชฐเซ‡ เช˜เชŸเชพเชกเซ‹ เชฅเชพเชฏ เช›เซ‡. เชฒเซ‹เช—เซ€เช‚เช— เชธเซ‡เชŸเชฟเช‚เช— config.xml เชซเชพเช‡เชฒเชฎเชพเช‚ เชธเซ‡เชŸ เช•เชฐเซ‡เชฒ เช›เซ‡:

<!-- Possible levels: https://github.com/pocoproject/poco/blob/develop/Foundation/include/Poco/Logger. h#L105 -->
<level>warning</level>

เช•เซ‡เชŸเชฒเชพเช• เช‰เชชเชฏเซ‹เช—เซ€ เช†เชฆเซ‡เชถเซ‹

ะŸะพัะบะพะปัŒะบัƒ ะพั€ะธะณะธะฝะฐะปัŒะฝั‹ะต ะฟะฐะบะตั‚ั‹ ัƒัั‚ะฐะฝะพะฒะบะธ ัะพะฑะธั€ะฐัŽั‚ัั ะฟะพ Debian, ั‚ะพ ะดะปั ะดั€ัƒะณะธั… ะฒะตั€ัะธะน Linux ะฝะตะพะฑั…ะพะดะธะผะพ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะฟะฐะบะตั‚ั‹ ัะพะฑั€ะฐะฝะฝั‹ะต ะบะพะผะฟะฐะฝะธะตะน Altinity.
 
ะ’ะพั‚ ะฟะพ ัั‚ะพะน ััั‹ะปะบะต ะตัั‚ัŒ ะธะฝัั‚ั€ัƒะบั†ะธะธ ั ััั‹ะปะบะฐะผะธ ะฝะฐ ะธั… ั€ะตะฟะพะทะธั‚ะพั€ะธะน: https://www.altinity.com/blog/2017/12/18/logstash-with-clickhouse
sudo yum search clickhouse-server
sudo yum install clickhouse-server.noarch
  
1. ะฟั€ะพะฒะตั€ะบะฐ ัั‚ะฐั‚ัƒัะฐ
sudo systemctl status clickhouse-server
 
2. ะพัั‚ะฐะฝะพะฒะบะฐ ัะตั€ะฒะตั€ะฐ
sudo systemctl stop clickhouse-server
 
3. ะทะฐะฟัƒัะบ ัะตั€ะฒะตั€ะฐ
sudo systemctl start clickhouse-server
 
ะ—ะฐะฟัƒัะบ ะดะปั ะฒั‹ะฟะพะปะฝะตะฝะธั ะทะฐะฟั€ะพัะพะฒ ะฒ ะผะฝะพะณะพัั‚ั€ะพั‡ะฝะพะผ ั€ะตะถะธะผะต (ะฒั‹ะฟะพะปะฝะตะฝะธะต ะฟะพัะปะต ะทะฝะฐะบะฐ ";")
clickhouse-client --multiline
clickhouse-client --multiline --host 127.0.0.1 --password pa55w0rd
clickhouse-client --multiline --host 127.0.0.1 --port 9440 --secure --user default --password pa55w0rd
 
ะŸะปะฐะณะธะฝ ะบะปะธะบะปะฐัƒะทะฐ ะดะปั ะปะพะณัั‚ะตัˆ ะฒ ัะปัƒั‡ะฐะต ะพัˆะธะฑะบะธ ะฒ ะพะดะฝะพะน ัั‚ั€ะพะบะต ัะพั…ั€ะฐะฝัะตั‚ ะฒััŽ ะฟะฐั‡ะบัƒ ะฒ ั„ะฐะนะป /tmp/log_web_failed.json
ะœะพะถะฝะพ ะฒั€ัƒั‡ะฝัƒัŽ ะธัะฟั€ะฐะฒะธั‚ัŒ ัั‚ะพั‚ ั„ะฐะนะป ะธ ะฟะพะฟั€ะพะฑะพะฒะฐั‚ัŒ ะทะฐะปะธั‚ัŒ ะตะณะพ ะฒ ะ‘ะ” ะฒั€ัƒั‡ะฝัƒัŽ:
clickhouse-client --host 127.0.0.1 --password password --query="INSERT INTO log_web FORMAT JSONEachRow" < /tmp/log_web_failed__fixed.json
 
sudo mv /etc/logstash/tmp/log_web_failed.json /etc/logstash/tmp/log_web_failed__fixed.json
sudo chown user_dev /etc/logstash/tmp/log_web_failed__fixed.json
sudo clickhouse-client --host 127.0.0.1 --password password --query="INSERT INTO log_web FORMAT JSONEachRow" < /etc/logstash/tmp/log_web_failed__fixed.json
sudo mv /etc/logstash/tmp/log_web_failed__fixed.json /etc/logstash/tmp/log_web_failed__fixed_.json
 
ะฒั‹ั…ะพะด ะธะท ะบะพะผะฐะฝะดะฝะพะน ัั‚ั€ะพะบะธ
quit;
## ะะฐัั‚ั€ะพะนะบะฐ TLS
https://www.altinity.com/blog/2019/3/5/clickhouse-networking-part-2
 
openssl s_client -connect log.domain.com:9440 < /dev/null

logstash FileBeat เชฅเซ€ RabbitMQ เช•เชคเชพเชฐ เชธเซเชงเซ€ เชฐเชพเช‰เชŸเชฐ เชฒเซ‹เช— เช•เชฐเซ‹

เช† เช˜เชŸเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— FileBeat เชฅเซ€ RabbitMQ เช•เชคเชพเชฐเชฎเชพเช‚ เช†เชตเชคเชพ เชฒเซ‹เช—เชจเซ‡ เชฐเซ‚เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡. เช…เชนเซ€เช‚ เชฌเซ‡ เชฎเซเชฆเซเชฆเชพ เช›เซ‡:

  1. เช•เชฎเชจเชธเซ€เชฌเซ‡, RabbitMQ เชชเชฐ เชธเซ€เชงเซเช‚ เชฒเช–เชตเชพ เชฎเชพเชŸเซ‡ FileBeat เชชเชพเชธเซ‡ เช†เช‰เชŸเชชเซเชŸ เชชเซเชฒเช—เช‡เชจ เชจเชฅเซ€. เช…เชจเซ‡ เช†เชตเซ€ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ, เชคเซ‡เชฎเชจเชพ เช—เซ€เชฅเชฌ เชชเชฐเชจเชพ เชฎเซเชฆเซเชฆเชพเชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฐเชพเช–เซ€เชจเซ‡, เช…เชฎเชฒเซ€เช•เชฐเชฃ เชฎเชพเชŸเซ‡ เช†เชฏเซ‹เชœเชฟเชค เชจเชฅเซ€. เช•เชพเชซเช•เชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจ เช›เซ‡, เชชเชฐเช‚เชคเซ เช•เซ‡เชŸเชฒเชพเช• เช•เชพเชฐเชฃเซ‹เชธเชฐ เช…เชฎเซ‡ เชคเซ‡เชจเซ‹ เช˜เชฐเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€.
  2. DMZ เชฎเชพเช‚ เชฒเซ‹เช— เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เช†เชตเชถเซเชฏเช•เชคเชพเช“ เช›เซ‡. เชคเซ‡เชจเชพ เช†เชงเชพเชฐเซ‡, เชฒเซ‰เช—เซเชธ เชชเชนเซ‡เชฒเชพ เช•เชคเชพเชฐเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชพเชตเชพ เชœเซ‹เชˆเช เช…เชจเซ‡ เชชเช›เซ€ LogStash เชฌเชนเชพเชฐเชฅเซ€ เช•เชคเชพเชฐเชฎเชพเช‚เชฅเซ€ เชเชจเซเชŸเซเชฐเซ€เช“ เชตเชพเช‚เชšเซ‡ เช›เซ‡.

เชคเซ‡เชฅเซ€, เชคเซ‡ เชเชตเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช›เซ‡ เช•เซ‡ เชœเซเชฏเชพเช‚ เชธเชฐเซเชตเชฐเซเชธ DMZ เชฎเชพเช‚ เชธเซเชฅเชฟเชค เช›เซ‡ เช•เซ‡ เชตเซเชฏเช•เซเชคเชฟเช เช†เชตเซ€ เชฅเซ‹เชกเซ€ เชœเชŸเชฟเชฒ เชฏเซ‹เชœเชจเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชชเชกเชถเซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡:

iis_w3c_logs__filebeat_rabbitmq.conf

input {
 
    beats {
        port => 5044
        type => 'iis'
        ssl => true
        ssl_certificate_authorities => ["/etc/pki/tls/certs/app/ca.pem", "/etc/pki/tls/certs/app/ca-issuing.pem"]
        ssl_certificate => "/etc/pki/tls/certs/app/queue.domain.com.cer"
        ssl_key => "/etc/pki/tls/certs/app/queue.domain.com-pkcs8.key"
        ssl_verify_mode => "peer"
    }
 
}
 
output { 
  #stdout {codec => rubydebug}
 
    rabbitmq {
        host => "127.0.0.1"
        port => 5672
        exchange => "monitor.direct"
        exchange_type => "direct"
        key => "%{[fields][fld_app_name]}"
        user => "q-writer"
        password => "password"
        ssl => false
    }
}

เชฐเซ‡เชฌเชฟเชŸเชเชฎเช•เซเชฏเซ. เชธเช‚เชฆเซ‡เชถ เช•เชคเชพเชฐ

เช† เช˜เชŸเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— DMZ เชฎเชพเช‚ เชฒเซ‹เช— เชเชจเซเชŸเซเชฐเซ€เช“เชจเซ‡ เชฌเชซเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡. เชฐเซ‡เช•เซ‹เชฐเซเชกเชฟเช‚เช— เชซเชพเช‡เชฒเชฌเซ€เชŸ โ†’ เชฒเซ‹เช—เชธเซเชŸเซ‡เชถเชจเชพ เชธเชฎเซ‚เชน เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชตเชพเช‚เชšเชจ DMZ เชจเซ€ เชฌเชนเชพเชฐเชฅเซ€ LogStash เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. RabboitMQ เชฆเซเชตเชพเชฐเชพ เช•เชพเชฎ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เชชเซเชฐเชคเชฟ เชธเซ‡เช•เชจเซเชก เชฒเช—เชญเช— 4 เชนเชœเชพเชฐ เชธเช‚เชฆเซ‡เชถเชพเช“ เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เชธเช‚เชฆเซ‡เชถ เชฐเซ‚เชŸเซ€เช‚เช— เชธเชฟเชธเซเชŸเชฎ เชจเชพเชฎ เชฆเซเชตเชพเชฐเชพ เช—เซ‹เช เชตเซ‡เชฒ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡ FileBeat เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชกเซ‡เชŸเชพ เชชเชฐ เช†เชงเชพเชฐเชฟเชค. เชฌเชงเชพ เชธเช‚เชฆเซ‡เชถเชพเช“ เชเช• เช•เชคเชพเชฐเชฎเชพเช‚ เชœเชพเชฏ เช›เซ‡. เชœเซ‹ เช•เซ‹เชˆ เช•เชพเชฐเชฃเซ‹เชธเชฐ เช•เชคเชพเชฐเชฌเชฆเซเชง เชธเซ‡เชตเชพ เชฌเช‚เชง เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซ‹ เชชเช›เซ€ เช† เชธเช‚เชฆเซ‡เชถเชพเช“เชจเซ€ เช–เซ‹เชŸ เชคเชฐเชซ เชฆเซ‹เชฐเซ€ เชœเชถเซ‡ เชจเชนเซ€เช‚: เชซเชพเช‡เชฒเชฌเซ€เชŸเซเชธ เช•เชจเซ‡เช•เซเชถเชจ เชญเซ‚เชฒเซ‹ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชถเซ‡ เช…เชจเซ‡ เช…เชธเซเชฅเชพเชฏเซ€ เชฐเซ‚เชชเซ‡ เชฎเซ‹เช•เชฒเชตเชพเชจเซเช‚ เชธเซเชฅเช—เชฟเชค เช•เชฐเชถเซ‡. เช…เชจเซ‡ LogStash เชœเซ‡ เช•เชคเชพเชฐเชฎเชพเช‚เชฅเซ€ เชตเชพเช‚เชšเซ‡ เช›เซ‡ เชคเซ‡ เชชเชฃ เชจเซ‡เชŸเชตเชฐเซเช• เชญเซ‚เชฒเซ‹ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชถเซ‡ เช…เชจเซ‡ เช•เชจเซ‡เช•เซเชถเชจ เชชเซเชจเชƒเชธเซเชฅเชพเชชเชฟเชค เชฅเชตเชพเชจเซ€ เชฐเชพเชน เชœเซ‹เชถเซ‡. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชกเซ‡เชŸเชพ, เช…เชฒเชฌเชคเซเชค, เชนเชตเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เชชเชฐ เชฒเช–เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เชจเชนเซ€เช‚.

เชจเซ€เชšเซ‡เชจเซ€ เชธเซ‚เชšเชจเชพเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชคเชพเชฐ เชฌเชจเชพเชตเชตเชพ เช…เชจเซ‡ เช—เซ‹เช เชตเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡:

sudo /usr/local/bin/rabbitmqadmin/rabbitmqadmin declare exchange --vhost=/ name=monitor.direct type=direct sudo /usr/local/bin/rabbitmqadmin/rabbitmqadmin declare queue --vhost=/ name=web_log durable=true
sudo /usr/local/bin/rabbitmqadmin/rabbitmqadmin --vhost="/" declare binding source="monitor.direct" destination_type="queue" destination="web_log" routing_key="site1.domain.ru"
sudo /usr/local/bin/rabbitmqadmin/rabbitmqadmin --vhost="/" declare binding source="monitor.direct" destination_type="queue" destination="web_log" routing_key="site2.domain.ru"

เช—เซเชฐเชพเชซเชจเชพ. เชกเซ‡เชถเชฌเซ‹เชฐเซเชกเซเชธ

เช† เช˜เชŸเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฎเซ‹เชจเชฟเชŸเชฐเชฟเช‚เช— เชกเซ‡เชŸเชพเชจเซ€ เช•เชฒเซเชชเชจเชพ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชคเชฎเชพเชฐเซ‡ Grafana 4.6+ เชชเซเชฒเช—เช‡เชจ เชฎเชพเชŸเซ‡ ClickHouse เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชกเซ‡เชถเชฌเซ‹เชฐเซเชก เชชเชฐ เชเชธเช•เซเชฏเซเชเชฒ เชซเชฟเชฒเซเชŸเชฐเซเชธเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพเชจเซ€ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพเชฎเชพเช‚ เชธเซเชงเชพเชฐเซ‹ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเชพเชฐเซ‡ เชคเซ‡เชฎเชพเช‚ เชฅเซ‹เชกเซ‹ เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเชตเซ‹ เชชเชกเซเชฏเซ‹.

เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช…เชฎเซ‡ เชตเซ‡เชฐเชฟเชฏเซ‡เชฌเชฒเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช, เช…เชจเซ‡ เชœเซ‹ เชคเซ‡ เชซเชฟเชฒเซเชŸเชฐ เชซเซ€เชฒเซเชกเชฎเชพเช‚ เชธเซ‡เชŸ เชจ เชนเซ‹เชฏ, เชคเซ‹ เช…เชฎเซ‡ เชˆเชšเซเช›เซ€เช เช›เซ€เช เช•เซ‡ เชคเซ‡ เชซเซ‹เชฐเซเชฎเชจเซ€ เชœเซเชฏเชพเช‚ ( uriStem = ยป AND uriStem != ยป ) เชฎเชพเช‚ เชธเซเชฅเชฟเชคเชฟ เชชเซ‡เชฆเชพ เชจ เช•เชฐเซ‡. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ uriStem เช•เซ‰เชฒเชฎ เชตเชพเช‚เชšเชถเซ‡. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เช…เชฎเซ‡ เช…เชฒเช—-เช…เชฒเช— เชตเชฟเช•เชฒเซเชชเซ‹ เช…เชœเชฎเชพเชตเซเชฏเชพ เช…เชจเซ‡ เช›เซ‡เชตเชŸเซ‡ เชชเซเชฒเช—เช‡เชจ ($valueIfEmpty เชฎเซ‡เช•เซเชฐเซ‹)เชจเซ‡ เชธเซเชงเชพเชฐเซเชฏเซเช‚ เชœเซ‡เชฅเซ€ เช•เชฐเซ€เชจเซ‡ เช–เชพเชฒเซ€ เชฎเซ‚เชฒเซเชฏเชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชคเซ‡ เช•เซ‰เชฒเชฎเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ 1 เชชเชฐเชค เช•เชฐเซ‡.

เช…เชจเซ‡ เชนเชตเซ‡ เชคเชฎเซ‡ เช—เซเชฐเชพเชซ เชฎเชพเชŸเซ‡ เช† เช•เซเชตเซ‡เชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹

$columns(response, count(*) c) from $table where $adhoc
and $valueIfEmpty($fld_app_name, 1, fld_app_name = '$fld_app_name')
and $valueIfEmpty($fld_app_module, 1, fld_app_module = '$fld_app_module') and $valueIfEmpty($fld_server_name, 1, fld_server_name = '$fld_server_name') and $valueIfEmpty($uriStem, 1, uriStem like '%$uriStem%')
and $valueIfEmpty($clientRealIP, 1, clientRealIP = '$clientRealIP')

เชœเซ‡ เช† SQL เชฎเชพเช‚ เชญเชพเชทเชพเช‚เชคเชฐ เช•เชฐเซ‡ เช›เซ‡ (เชจเซ‹เช‚เชง เช•เชฐเซ‹ เช•เซ‡ เช–เชพเชฒเซ€ uriStem เชซเซ€เชฒเซเชก เชฎเชพเชคเซเชฐ 1 เชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡)

SELECT
t,
groupArray((response, c)) AS groupArr
FROM (
SELECT
(intDiv(toUInt32(logdatetime), 60) * 60) * 1000 AS t, response,
count(*) AS c FROM default.log_web
WHERE (logdate >= toDate(1565061982)) AND (logdatetime >= toDateTime(1565061982)) AND 1 AND (fld_app_name = 'site1.domain.ru') AND (fld_app_module = 'web') AND 1 AND 1 AND 1
GROUP BY
t, response
ORDER BY
t ASC,
response ASC
)
GROUP BY t ORDER BY t ASC

เชจเชฟเชทเซเช•เชฐเซเชท

เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‹ เชฆเซ‡เช–เชพเชต เชฌเชœเชพเชฐเชฎเชพเช‚ เชเช• เชธเซ€เชฎเชพเชšเชฟเชนเซเชจเชฐเซ‚เชช เช˜เชŸเชจเชพ เชฌเชจเซ€ เช—เชˆ เช›เซ‡. เชคเซ‡ เช•เชฒเซเชชเชจเชพ เช•เชฐเชตเซ€ เชฎเซเชถเซเช•เซ‡เชฒ เชนเชคเซเช‚ เช•เซ‡, เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เชฎเชซเชค, เชเช• เชœ เช•เซเชทเชฃเชฎเชพเช‚ เช…เชฎเซ‡ เชฎเซ‹เชŸเชพ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชถเช•เซเชคเชฟเชถเชพเชณเซ€ เช…เชจเซ‡ เชตเซเชฏเชตเชนเชพเชฐเซ เชธเชพเชงเชจเชฅเซ€ เชธเชœเซเชœ เช›เซ€เช. เช…เชฒเชฌเชคเซเชค, เชตเชงเชคเซ€ เชœเชคเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเซ‹ เชธเชพเชฅเซ‡ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฌเชนเซเชตเชฟเชง เชธเชฐเซเชตเชฐเซเชธ เชชเชฐ เชถเชพเชฐเซเชกเชฟเช‚เช— เช…เชจเซ‡ เชจเช•เชฒ), เชฏเซ‹เชœเชจเชพ เชตเชงเซ เชœเชŸเชฟเชฒ เชฌเชจเชถเซ‡. เชชเชฐเช‚เชคเซ เชชเซเชฐเชฅเชฎ เช›เชพเชช เชชเชฐ, เช† เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเซเช‚ เช–เซ‚เชฌ เชœ เชธเซเช–เชฆ เช›เซ‡. เชคเซ‡ เชœเซ‹เชˆ เชถเช•เชพเชฏ เช›เซ‡ เช•เซ‡ เช‰เชคเซเชชเชพเชฆเชจ "เชฒเซ‹เช•เซ‹ เชฎเชพเชŸเซ‡" เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡.

ElasticSearch เชจเซ€ เชคเซเชฒเชจเชพเชฎเชพเช‚, เชฒเซ‰เช—เซเชธ เชธเซเชŸเซ‹เชฐ เช•เชฐเชตเชพ เช…เชจเซ‡ เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช—เชจเซ‹ เช–เชฐเซเชš เชชเชพเช‚เชšเชฅเซ€ เชฆเชธ เช—เชฃเซ‹ เช“เช›เซ‹ เชฅเชตเชพเชจเซ‹ เช…เช‚เชฆเชพเชœ เช›เซ‡. เชฌเซ€เชœเชพ เชถเชฌเซเชฆเซ‹เชฎเชพเช‚ เช•เชนเซ€เช เชคเซ‹, เชœเซ‹ เชตเชฐเซเชคเชฎเชพเชจ เชกเซ‡เชŸเชพ เชฎเชพเชŸเซ‡ เช†เชชเชฃเซ‡ เช…เชจเซ‡เช• เชฎเชถเซ€เชจเซ‹เชจเซเช‚ เช•เซเชฒเชธเซเชŸเชฐ เชธเซ‡เชŸ เช•เชฐเชตเซเช‚ เชชเชกเชถเซ‡, เชคเซ‹ เช•เซเชฒเชฟเช•เชนเชพเช‰เชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เชเช• เช“เช›เซ€-เชชเชพเชตเชฐ เชฎเชถเซ€เชจ เช†เชชเชฃเชพ เชฎเชพเชŸเซ‡ เชชเซ‚เชฐเชคเซ€ เช›เซ‡. เชนเชพ, เช…เชฒเชฌเชคเซเชค, ElasticSearchเชฎเชพเช‚ เช‘เชจ-เชกเชฟเชธเซเช• เชกเซ‡เชŸเชพ เช•เชฎเซเชชเซเชฐเซ‡เชถเชจ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเซเชธ เช…เชจเซ‡ เช…เชจเซเชฏ เชธเซเชตเชฟเชงเชพเช“ เชชเชฃ เช›เซ‡ เชœเซ‡ เชธเช‚เชธเชพเชงเชจ เชตเชชเชฐเชพเชถเชจเซ‡ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฐเซ€เชคเซ‡ เช˜เชŸเชพเชกเซ€ เชถเช•เซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ ClickHouseเชจเซ€ เชคเซเชฒเชจเชพเชฎเชพเช‚, เช† เชตเชงเซ เช–เชฐเซเชšเชพเชณ เชนเชถเซ‡.

เช…เชฎเชพเชฐเชพ เชคเชฐเชซเชฅเซ€ เช•เซ‹เชˆ เช–เชพเชธ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เชตเชฟเชจเชพ, เชกเชฟเชซเซ‰เชฒเซเชŸ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชชเชฐ, เชกเซ‡เชŸเชพ เชฒเซ‹เชก เช•เชฐเชตเชพเชจเซเช‚ เช…เชจเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚เชฅเซ€ เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชจเซเช‚ เช…เชฆเซเชญเซเชค เชเชกเชชเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชนเชœเซ€ เชตเชงเชพเชฐเซ‡ เชกเซ‡เชŸเชพ เชจเชฅเซ€ (เช†เชถเชฐเซ‡ 200 เชฎเชฟเชฒเชฟเชฏเชจ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธ), เชชเชฐเช‚เชคเซ เชธเชฐเซเชตเชฐ เชชเซ‹เชคเซ‡ เชœ เชจเชฌเชณเซเช‚ เช›เซ‡. เช…เชฎเซ‡ เชญเชตเชฟเชทเซเชฏเชฎเชพเช‚ เช† เชŸเซ‚เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช…เชจเซเชฏ เชนเซ‡เชคเซเช“ เชฎเชพเชŸเซ‡ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช เชœเซ‡ เชฒเซ‰เช— เชธเซเชŸเซ‹เชฐ เช•เชฐเชตเชพ เชธเชพเชฅเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เชจเชฅเซ€. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชเชจเซเชก-เชŸเซ-เชเชจเซเชก เชเชจเชพเชฒเชฟเชŸเชฟเช•เซเชธ เชฎเชพเชŸเซ‡, เชธเซเชฐเช•เซเชทเชพเชจเชพ เช•เซเชทเซ‡เชคเซเชฐเชฎเชพเช‚, เชฎเชถเซ€เชจ เชฒเชฐเซเชจเชฟเช‚เช—.

เช…เช‚เชคเซ‡, เช—เซเชฃเชฆเซ‹เชท เชตเชฟเชถเซ‡ เชฅเซ‹เชกเซเช‚.

เชฎเชฟเชจเชฟเชธเซ€

  1. เชฎเซ‹เชŸเชพ เชฌเซ…เชšเซ‡เชธเชฎเชพเช‚ เชฐเซ‡เช•เซ‹เชฐเซเชก เชฒเซ‹เชก เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ‡. เชเช• เชคเชฐเชซ, เช† เชเช• เชธเซเชตเชฟเชงเชพ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเชฎเชพเชฐเซ‡ เชนเชœเซ เชชเชฃ เชฐเซ‡เช•เซ‹เชฐเซเชก เชฌเชซเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเชงเชพเชฐเชพเชจเชพ เช˜เชŸเช•เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชชเชกเชถเซ‡. เช† เช•เชพเชฐเซเชฏ เชนเช‚เชฎเซ‡เชถเชพ เชธเชฐเชณ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชนเชœเซ เชชเชฃ เช‰เช•เซ‡เชฒเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเซเช‚ เช›เซ‡. เช…เชจเซ‡ เชนเซเช‚ เชฏเซ‹เชœเชจเชพเชจเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚.
  2. เช•เซ‡เชŸเชฒเซ€เช• เชตเชฟเชšเชฟเชคเซเชฐ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เช…เชฅเชตเชพ เชจเชตเซ€ เชธเซเชตเชฟเชงเชพเช“ เช˜เชฃเซ€เชตเชพเชฐ เชจเชตเชพ เชธเช‚เชธเซเช•เชฐเชฃเซ‹เชฎเชพเช‚ เชคเซ‚เชŸเซ€ เชœเชพเชฏ เช›เซ‡. เช† เชšเชฟเช‚เชคเชพเชจเซเช‚ เช•เชพเชฐเชฃ เชฌเชจเซ‡ เช›เซ‡, เชจเชตเชพ เชธเช‚เชธเซเช•เชฐเชฃ เชชเชฐ เช…เชชเช—เซเชฐเซ‡เชก เช•เชฐเชตเชพเชจเซ€ เช‡เชšเซเช›เชพ เช˜เชŸเชพเชกเซ‡ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช•เชพเชซเช•เชพ เชŸเซ‡เชฌเชฒ เชเชจเซเชœเชฟเชจ เช เชเช• เช–เซ‚เชฌ เชœ เช‰เชชเชฏเซ‹เช—เซ€ เชธเซเชตเชฟเชงเชพ เช›เซ‡ เชœเซ‡ เชคเชฎเชจเซ‡ เช—เซเชฐเชพเชนเช•เซ‹เชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซเชฏเชพ เชตเชฟเชจเชพ, เช•เชพเชซเช•เชพเชจเซ€ เช‡เชตเซ‡เชจเซเชŸเซเชธ เชธเซ€เชงเซ€ เชตเชพเช‚เชšเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เช—เซ€เชฅเชฌ เชชเชฐเชจเชพ เชฎเซเชฆเซเชฆเชพเช“เชจเซ€ เชธเช‚เช–เซเชฏเชพเชจเซ‡ เช†เชงเชพเชฐเซ‡, เช…เชฎเซ‡ เช‰เชคเซเชชเชพเชฆเชจเชฎเชพเช‚ เช† เชเชจเซเชœเชฟเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชนเชœเซ€ เชชเชฃ เชธเชพเชตเชšเซ‡เชค เช›เซ€เช. เชœเซ‹ เช•เซ‡, เชœเซ‹ เชคเชฎเซ‡ เชฌเชพเชœเซ เชชเชฐ เช…เชšเชพเชจเช• เชนเชพเชตเชญเชพเชต เชจ เช•เชฐเซ‹ เช…เชจเซ‡ เชฎเซเช–เซเชฏ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹, เชคเซ‹ เชคเซ‡ เชธเซเชฅเชฟเชฐ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡.

ะŸะปัŽัั‹

  1. เชงเซ€เชฎเซ‹ เชชเชกเชคเซ‹ เชจเชฅเซ€.
  2. เช“เช›เซ€ เชชเซเชฐเชตเซ‡เชถ เชฅเซเชฐเซ‡เชถเซ‹เชฒเซเชก.
  3. เช–เซเชฒเซเชฒเชพ เชธเซเชคเซเชฐเซ‹เชค.
  4. เชฎเชซเชค.
  5. เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เชธเซเช•เซ‡เชฒ เช•เชฐเซ‹ (เชฌเซ‹เช•เซเชธเชจเซ€ เชฌเชนเชพเชฐ เชถเซ‡เชฐเชฟเช‚เช—/เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ)
  6. เชธเช‚เชšเชพเชฐ เชฎเช‚เชคเซเชฐเชพเชฒเชฏ เชฆเซเชตเชพเชฐเชพ เชญเชฒเชพเชฎเชฃ เช•เชฐเชพเชฏเซ‡เชฒ เชฐเชถเชฟเชฏเชจ เชธเซ‰เชซเซเชŸเชตเซ‡เชฐเชจเชพ เชฐเชœเชฟเชธเซเชŸเชฐเชฎเชพเช‚ เชถเชพเชฎเซ‡เชฒ เช›เซ‡.
  7. เชฏเชพเชจเซเชกเซ‡เช•เซเชท เชคเชฐเชซเชฅเซ€ เชธเชคเซเชคเชพเชตเชพเชฐ เชธเชฎเชฐเซเชฅเชจเชจเซ€ เชนเชพเชœเชฐเซ€.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹