ืงืœื™ืงื›ืึธื•ืกืข ื“ืึทื˜ืึทื‘ืึทืกืข ืคึฟืึทืจ ื™ื•ืžืึทื ื– ืึธื“ืขืจ ืคืจืขืžื“ ื˜ืขื˜ืฉื ืึธืœืึธื’ื™ืขืก

Aleksey Lizunov, ื”ื•ื™ืคึผื˜ ืคื•ืŸ ื“ื™ ืงืึทืžืคึผืึทื˜ื™ื ืก ืฆืขื ื˜ืขืจ ืคึฟืึทืจ ืจื™ืžืึธื•ื˜ ืกืขืจื•ื•ื™ืก ื˜ืฉืึทื ืึทืœื– ืคื•ืŸ ื“ืขืจ ื“ื™ืจืขืงื˜ืึธืจืึทื˜ืข ืคื•ืŸ โ€‹โ€‹ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื˜ืขื˜ืฉื ืึธืœืึธื’ื™ืขืก ืคื•ืŸ ื“ื™ MKB

ืงืœื™ืงื›ืึธื•ืกืข ื“ืึทื˜ืึทื‘ืึทืกืข ืคึฟืึทืจ ื™ื•ืžืึทื ื– ืึธื“ืขืจ ืคืจืขืžื“ ื˜ืขื˜ืฉื ืึธืœืึธื’ื™ืขืก

ื•ื•ื™ ืึทืŸ ืึธืœื˜ืขืจื ืึทื˜ื™ื•ื• ืฆื• ื“ื™ ELK ืึธื ืœื™ื™ื’ืŸ (ElasticSearch, Logstash, Kibana), ืžื™ืจ ื˜ืึธืŸ ืคืึธืจืฉื•ื ื’ ืื•ื™ืฃ ื ื™ืฆืŸ ื“ื™ ClickHouse ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ื™ ืึท ื“ืึทื˜ืŸ ืงืจืึธื ืคึฟืึทืจ ืœืึธื’ืก.

ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, ืžื™ืจ ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ืจืขื“ืŸ ื•ื•ืขื’ืŸ ืื•ื ื“ื–ืขืจ ื“ืขืจืคืึทืจื•ื ื’ ืคื•ืŸ ื ื™ืฆืŸ ื“ื™ ClickHouse ื“ืึทื˜ืึทื‘ื™ื™ืก ืื•ืŸ ื“ื™ ืคึผืจื™ืœื™ืžืึทื ืขืจื™ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ืŸ ื“ื™ ืคึผื™ืœืึธื˜ ืึธืคึผืขืจืึทืฆื™ืข. ืขืก ื–ืึธืœ ื–ื™ื™ืŸ ืื ื’ืขื•ื•ื™ื–ืŸ ื’ืœื™ื™ืš ืึทื– ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ื–ืขื ืขืŸ ื™ืžืคึผืจืขืกื™ื•ื•.


ืงืœื™ืงื›ืึธื•ืกืข ื“ืึทื˜ืึทื‘ืึทืกืข ืคึฟืึทืจ ื™ื•ืžืึทื ื– ืึธื“ืขืจ ืคืจืขืžื“ ื˜ืขื˜ืฉื ืึธืœืึธื’ื™ืขืก

ื•ื•ื™ื™ึทื˜ืขืจ, ืžื™ืจ ื•ื•ืขืœืŸ ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ืื™ืŸ ืžืขืจ ื“ืขื˜ืึทืœ ื•ื•ื™ ืื•ื ื“ื–ืขืจ ืกื™ืกื˜ืขื ืื™ื– ืงืึทื ืคื™ื’ื™ืขืจื“ ืื•ืŸ ื•ื•ืึธืก ืงืึทืžืคึผืึธื•ื ืึทื ืฅ ืขืก ื‘ืืฉื˜ื™ื™ื˜ ืคื•ืŸ. ืื‘ืขืจ ืื™ืฆื˜ ืื™ืš ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ืจืขื“ืŸ ืึท ื‘ื™ืกืœ ื•ื•ืขื’ืŸ ื“ืขื ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ื™ ืึท ื’ืึทื ืฅ, ืื•ืŸ ื•ื•ืึธืก ืขืก ืื™ื– ื•ื•ืขืจื˜ ืฆื• ื‘ืึทืฆืึธืœืŸ ื•ืคืžืขืจืงื–ืึทืžืงื™ื™ึทื˜. ื“ื™ ClickHouse ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ื– ืึท ื”ื•ื™ืš-ืคืึธืจืฉื˜ืขืœื•ื ื’ ืึทื ืึทืœื™ืกื™ืก ืงืึธืœื•ืžื ืขืจ ื“ืึทื˜ืึทื‘ื™ื™ืก ืคึฟื•ืŸ ื™ืึทื ื“ืขืงืก. ืขืก ืื™ื– ื’ืขื ื™ืฆื˜ ืื™ืŸ ื™ืึทื ื“ืขืงืก ื‘ืึทื“ื™ื ื•ื ื’ืก, ื˜ื›ื™ืœืขืก ืขืก ืื™ื– ื“ื™ ื”ื•ื™ืคึผื˜ ื“ืึทื˜ืŸ ืกื˜ืึธืจื™ื“ื–ืฉ ืคึฟืึทืจ Yandex.Metrica. ืขืคึฟืŸ ืžืงื•ืจ ืกื™ืกื˜ืขื, ืคืจื™ื™. ืคึฟื•ืŸ ืึท ื“ืขื•ื•ืขืœืึธืคึผืขืจ ืก ืคื•ื ื˜ ืคื•ืŸ ืžื™ื™ื ื•ื ื’, ืื™ืš ืฉื˜ืขื ื“ื™ืง ื’ืขื—ื™ื“ื•ืฉื˜ ื•ื•ื™ ื–ื™ื™ ื™ืžืคึผืœืึทืžืขื ืึทื“ ืขืก, ื•ื•ื™ื™ึทืœ ืขืก ื–ืขื ืขืŸ ืคืึทื ื˜ืึทืกื˜ื™ืฉ ื’ืจื•ื™ืก ื“ืึทื˜ืŸ. ืื•ืŸ ื“ื™ ื‘ืึทื ื™ืฆืขืจ ืฆื•ื‘ื™ื ื“ ืคื•ืŸ Metrica ื–ื™ืš ืื™ื– ื–ื™ื™ืขืจ ืคืœืขืงืกืึทื‘ืึทืœ ืื•ืŸ ืฉื ืขืœ. ื‘ืฒึทื ืขืจืฉื˜ืŸ ื‘ืึทืงืึทื ื˜ืŸ ืžื™ื˜ ื“ืขืจ ื“ืึธื–ื™ืงืขืจ ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ื– ื“ืขืจ ืจื•ืฉื: โ€žื ื•, ืขื ื“ืœืขืš! ื’ืขืžืื›ื˜ ืคึฟืึทืจ ื“ื™ ืžืขื ื˜ืฉืŸ! ืกื˜ืึทืจื˜ื™ื ื’ ืคื•ืŸ ื“ื™ ื™ื™ึทื ืžืึธื ื˜ื™ืจื•ื ื’ ืคึผืจืึธืฆืขืก ืื•ืŸ ืกืึธืฃ ืžื™ื˜ ืฉื™ืงืŸ ืจื™ืงื•ื•ืขืก.

ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ื”ืื˜ ืึท ื–ื™ื™ืขืจ ื ื™ื“ืขืจื™ืง ืคึผืึธื–ื™ืฆื™ืข ืฉื•ื•ืขืœ. ืืคื™ืœื• ืึทืŸ ื“ื•ืจื›ืฉื ื™ื˜ืœืขืš-ื‘ืึธืงืข ื“ืขื•ื•ืขืœืึธืคึผืขืจ ืงืขื ืขืŸ ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ืขื ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ืŸ ืึท ื‘ื™ืกืœ ืžื™ื ื•ื˜ ืื•ืŸ ืึธื ื”ื™ื™ื‘ืŸ ื ื™ืฆืŸ ืขืก. ืึทืœืฅ ืึทืจื‘ืขื˜ ืงืœืืจ. ืืคื™ืœื• ืžืขื ื˜ืฉืŸ ื•ื•ืึธืก ื–ืขื ืขืŸ ื ื™ื™ึท ืžื™ื˜ ืœื™ื ื•ืงืก ืงืขื ืขืŸ ื’ืขืฉื•ื•ื™ื ื“ ืฉืขืคึผืŸ ื“ื™ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’ ืื•ืŸ ื˜ืึธืŸ ื“ื™ ืกื™ืžืคึผืœืึทืกื˜ ืึทืคึผืขืจื™ื™ืฉืึทื ื–. ืื•ื™ื‘ ืคืจื™ืขืจ, ืžื™ื˜ ื“ื™ ื•ื•ืขืจื˜ืขืจ Big Data, Hadoop, Google BigTable, HDFS, ืึท ืคึผืจืึธืกื˜ ื“ืขื•ื•ืขืœืึธืคึผืขืจ ื”ืื˜ ื’ืขื“ืึทื ืง ืึทื– ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื•ื•ืขื’ืŸ ืขื˜ืœืขื›ืข ื˜ืขืจืึทื‘ื™ื˜ืขืก, ืคึผืขื˜ืึทื‘ื™ื˜ืขืก, ืึทื– ืขื˜ืœืขื›ืข ืกื•ืคึผืขืจื”ื•ืžืึทื ื– ื–ืขื ืขืŸ ืคืึทืจืงื ืึทืกื˜ ืื™ืŸ ืกืขื˜ื˜ื™ื ื’ืก ืื•ืŸ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคึฟืึทืจ ื“ื™ ืกื™ืกื˜ืขืžืขืŸ, ื“ืขืžืึธืœื˜ ืžื™ื˜ ื“ื™ ืึทื“ื•ื•ืขื ื˜ ืคื•ืŸ ื“ื™ ืงืœื™ืงื›ืึธื•ืกืข ื“ืึทื˜ืึทื‘ื™ื™ืก, ืžื™ืจ ื”ืึธื‘ืŸ ืึท ืคึผืฉื•ื˜, ืคืึทืจืฉื˜ื™ื™ื™ืง ื’ืขืฆื™ื™ึทื’ ืžื™ื˜ ื•ื•ืึธืก ืื™ืจ ืงืขื ืขืŸ ืกืึธืœื•ื•ืข ืึท ื‘ื™ื– ืึทื”ืขืจ ืึทื ืึทื˜ื™ื™ื ืึทื‘ืึทืœ ืงื™ื™ื˜ ืคื•ืŸ ื˜ืึทืกืงืก. ืขืก ื ืขืžื˜ ื‘ืœื•ื™ื– ืื™ื™ืŸ ื’ืึทื ืฅ ื“ื•ืจื›ืฉื ื™ื˜ืœืขืš ืžืึทืฉื™ืŸ ืื•ืŸ ืคื™ื ืฃ ืžื™ื ื•ื˜ ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ. ื“ืึธืก ืื™ื–, ืžื™ืจ ื”ืึธื‘ืŸ ืึทื–ืึท ืึท ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ื™, ืœืžืฉืœ, MySql, ืึธื‘ืขืจ ื‘ืœื•ื™ื– ืคึฟืึทืจ ืกื˜ืึธืจื™ื ื’ ื‘ื™ืœื™ืึทื ื– ืคื•ืŸ ืจืขืงืึธืจื“ืก! ื ื–ื™ื›ืขืจ ืกื•ืคึผืขืจ-ืึทืจื˜ืฉื™ื•ื•ืขืจ ืžื™ื˜ ื“ื™ SQL ืฉืคึผืจืึทืš. ืขืก ืื™ื– ื•ื•ื™ ืžืขื ื˜ืฉืŸ ื–ืขื ืขืŸ ืงืึธืœื ืขืจ ื“ื™ ื•ื•ืขืคึผืึทื ื– ืคื•ืŸ ื™ื™ืœื™ืึทื ื–.

ื•ื•ืขื’ืŸ ืื•ื ื“ื–ืขืจ ืœืึธื’ื™ื ื’ ืกื™ืกื˜ืขื

ืฆื• ื–ืึทืžืœืขืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข, IIS ืœืึธื’ ื˜ืขืงืขืก ืคื•ืŸ ื ืึธืจืžืึทืœ ืคึฟืึธืจืžืึทื˜ ื•ื•ืขื‘ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ื–ืขื ืขืŸ ื’ืขื ื™ืฆื˜ (ืžื™ืจ ื–ืขื ืขืŸ ื“ืขืจื•ื•ื™ื™ึทืœ ืคึผืึทืจืกื™ื ื’ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืœืึธื’ืก, ืึธื‘ืขืจ ื“ืขืจ ื”ื•ื™ืคึผื˜ ืฆื™ืœ ืื™ืŸ ื“ื™ ืคึผื™ืœืึธื˜ ื‘ื™ื ืข ืื™ื– ืฆื• ื–ืึทืžืœืขืŸ IIS ืœืึธื’ืก).

ืคึฟืึทืจ ืคืึทืจืฉื™ื“ืŸ ืกื™ื‘ื•ืช, ืžื™ืจ ืงืขืŸ ื ื™ืฉื˜ ื’ืึธืจ ืคืึทืจืœืึธื–ืŸ ื“ื™ ELK ืึธื ืœื™ื™ื’ืŸ, ืื•ืŸ ืžื™ืจ ืคืึธืจื–ืขืฆืŸ ืฆื• ื ื•ืฆืŸ ื“ื™ LogStash ืื•ืŸ Filebeat ืงืึทืžืคึผืึธื•ื ืึทื ืฅ, ื•ื•ืึธืก ื”ืึธื‘ืŸ ืคึผืจืึธื•ื•ืขืŸ ื–ื™ืš ื’ืขื–ื•ื ื˜ ืื•ืŸ ืึทืจื‘ืขื˜ ื’ืึทื ืฅ ืจื™ืœื™ื™ืึทื‘ืœื™ ืื•ืŸ ืคึผืจื™ื“ื™ืงื˜ืึทื‘ืœื™.

ื“ืขืจ ื’ืขื ืขืจืึทืœ ืœืึธื’ื™ื ื’ ืกื›ืขืžืข ืื™ื– ื’ืขื•ื•ื™ื–ืŸ ืื™ืŸ ื“ื™ ืคื™ื’ื•ืจ ืื•ื ื˜ืŸ:

ืงืœื™ืงื›ืึธื•ืกืข ื“ืึทื˜ืึทื‘ืึทืกืข ืคึฟืึทืจ ื™ื•ืžืึทื ื– ืึธื“ืขืจ ืคืจืขืžื“ ื˜ืขื˜ืฉื ืึธืœืึธื’ื™ืขืก

ื ืฉื˜ืจื™ืš ืคื•ืŸ ืฉืจื™ื™ื‘ืŸ ื“ืึทื˜ืŸ ืฆื• ื“ื™ ClickHouse ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ื– ื–ืขืœื˜ืŸ (ืึทืžืึธืœ ืคึผืขืจ ืกืขืงื•ื ื“ืข) ื™ื ืกืขืจืฉืึทืŸ ืคื•ืŸ ืจืขืงืึธืจื“ืก ืื™ืŸ ื’ืจื•ื™ืก ื‘ืึทื˜ืฉืึทื–. ื“ืึธืก ืื™ื–, ืžืฉืžืขื•ืช, ื“ื™ ืžืขืจืกื˜ "ืคึผืจืึธื‘ืœืขืžืึทื˜ื™ืง" ื˜ื™ื™ืœ ื•ื•ืึธืก ืื™ืจ ื˜ืจืขืคืŸ ื•ื•ืขืŸ ืื™ืจ ืขืจืฉื˜ืขืจ ื“ืขืจืคืึทืจื•ื ื’ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ื™ ืงืœื™ืงื›ืึธื•ืกืข ื“ืึทื˜ืึทื‘ื™ื™ืก: ื“ื™ ืกื›ืขืžืข ื•ื•ืขืจื˜ ืึท ื‘ื™ืกืœ ืžืขืจ ืงืึธืžืคึผืœื™ืฆื™ืจื˜.
ื“ืขืจ ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ LogStash, ื•ื•ืึธืก ื’ืœื™ื™ืš ื™ื ืกืขืจืฅ ื“ืึทื˜ืŸ ืื™ืŸ ClickHouse, ื’ืขื”ืึธืœืคึฟืŸ ืึท ืคึผืœืึทืฅ ื“ืึธ. ื“ืขืจ ืงืึธืžืคึผืึธื ืขื ื˜ ืื™ื– ื“ื™ืคึผืœื•ื™ื“ ืื•ื™ืฃ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืกืขืจื•ื•ืขืจ ื•ื•ื™ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ื–ื™ืš. ืึทื–ื•ื™, ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ืขืก ืื™ื– ื ื™ืฉื˜ ืจืขืงืึทืžืขื ื“ื™ื“ ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืึธื‘ืขืจ ืคื•ืŸ ืึท ืคึผืจืึทืงื˜ื™ืฉ ืคื•ื ื˜ ืคื•ืŸ ืžื™ื™ื ื•ื ื’, ืึทื–ื•ื™ ื ื™ืฉื˜ ืฆื• ืคึผืจืึธื“ื•ืฆื™ืจืŸ ื‘ืึทื–ื•ื ื“ืขืจ ืกืขืจื•ื•ืขืจืก ื‘ืฉืขืช ืขืก ืื™ื– ื“ื™ืคึผืœื•ื™ื“ ืื•ื™ืฃ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืกืขืจื•ื•ืขืจ. ืžื™ืจ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ืึธื‘ืกืขืจื•ื•ื™ืจืŸ ืงื™ื™ืŸ ืคื™ื™ืœื™ืขืจื– ืึธื“ืขืจ ืžื™ื˜ืœ ืงืึธื ืคืœื™ืงื˜ ืžื™ื˜ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก. ืื™ืŸ ืึทื“ื™ืฉืึทืŸ, ืขืก ื–ืึธืœ ื–ื™ื™ืŸ ืื ื’ืขื•ื•ื™ื–ืŸ ืึทื– ื“ื™ ืคึผืœื•ื’ื™ืŸ ื”ืื˜ ืึท ืจื™ื˜ืจื™ื™ ืžืขืงืึทื ื™ื–ืึทื ืื™ืŸ ืคืึทืœ ืคื•ืŸ ืขืจืจืึธืจืก. ืื•ืŸ ืื™ืŸ ืคืึทืœ ืคื•ืŸ ืขืจืจืึธืจืก, ื“ื™ ืคึผืœื•ื’ื™ืŸ ืฉืจื™ื™ื‘ื˜ ืฆื• ื“ื™ืกืง ืึท ืคึผืขืงืœ ืคื•ืŸ ื“ืึทื˜ืŸ ื•ื•ืึธืก ืงืขืŸ ื ื™ืฉื˜ ื–ื™ื™ืŸ ื™ื ืกืขืจื˜ืึทื“ (ื“ื™ ื˜ืขืงืข ืคึฟืึธืจืžืึทื˜ ืื™ื– ื‘ืึทืงื•ื•ืขื: ื ืึธืš ืขื“ื™ื˜ื™ื ื’, ืื™ืจ ืงืขื ืขืŸ ืœื™ื™ื›ื˜ ืึทืจื™ื™ึทื ืœื™ื™ื’ืŸ ื“ื™ ืงืขืจืขืงื˜ืึทื“ ืคึผืขืงืœ ืžื™ื˜ ืงืœื™ืงื›ืึธื•ืกืข-ืงืœื™ืขื ื˜).

ื ื’ืึทื ืฅ ืจืฉื™ืžื” ืคื•ืŸ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ื’ืขื ื™ืฆื˜ ืื™ืŸ ื“ื™ ืกื›ืขืžืข ืื™ื– ื“ืขืจืœืื ื’ื˜ ืื™ืŸ ื“ื™ ื˜ื™ืฉ:

ืจืฉื™ืžื” ืคื•ืŸ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ื’ืขื ื™ืฆื˜

ื ืึธืžืขืŸ

ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’

ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’ ืœื™ื ืง

NGINX

ืคืึทืจืงืขืจื˜ ืคึผืจืึทืงืกื™ ืฆื• ื‘ืึทื’ืจืขื ืขืฆืŸ ืึทืงืกืขืก ื“ื•ืจืš ืคึผืึธืจืฅ ืื•ืŸ ืึธืจื’ืึทื ื™ื–ื™ืจืŸ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ

ืื™ืฆื˜ ื ื™ื˜ ื’ืขื•ื•ื™ื™ื ื˜ ืื™ืŸ ื“ื™ ืกื›ืขืžืข

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

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

FileBeat

ืึทืจื™ื‘ืขืจืคื™ืจืŸ ืคื•ืŸ ื˜ืขืงืข ืœืึธื’ืก.

https://www.elastic.co/downloads/beats/filebeat (ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’ ื™ื ื•ื•ืขื ื˜ืึทืจ ืคึฟืึทืจ Windows 64bit).

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

Logstash-output-clickhouse

Loagstash ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื˜ืจืึทื ืกืคืขืจื™ื ื’ ืœืึธื’ืก ืฆื• ื“ื™ ClickHouse ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ืŸ ื‘ืึทื˜ืฉืึทื–

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

/usr/share/logstash/bin/logstash-plugin install logstash-output-clickhouse

/usr/share/logstash/bin/logstash-plugin install 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 ืืจื•ื™ืก ืื™ืŸ ื“ื™ ื™ืึทื ื“ืขืงืก ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™, ืึทื–ื•ื™ ืื™ืจ ืงืขื ืขืŸ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ื ื•ืฆืŸ ื–ื™ื™. ืื™ืŸ ื“ืขืจ ืฆื™ื™ื˜ ืคื•ืŸ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’, ืžื™ืจ ื’ืขื•ื•ื™ื™ื ื˜ ืคึผืึทืงืึทื“ื–ืฉืึทื– ื’ืขื‘ื•ื™ื˜ ื“ื•ืจืš Altinity.

ื’ืจืืคืื ื

ืงืœืึธืฅ ื•ื•ื™ื–ืฉื•ื•ืึทืœืึทื–ื™ื™ืฉืึทืŸ. ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื“ืึทืฉื‘ืึธืจื“ื–

https://grafana.com/

https://grafana.com/grafana/download

Redhat & Centos (64 ื‘ื™ื˜) - ื“ื™ ืœืขืฆื˜ืข ื•ื•ืขืจืกื™ืข

ืงืœื™ืงื›ืึธื•ืกืข ื“ืึทื˜ืŸ ืžืงื•ืจ ืคึฟืึทืจ 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 Runtime (ืคืืจืœืื ื’ื˜ ืคึฟืึทืจ RabbitMQ)

ืขืจืœืึทื ื’ ืจื•ื ื˜ื™ืžืข. ืคืืจืœืื ื’ื˜ ืคึฟืึทืจ RabbitMQ ืฆื• ืึทืจื‘ืขื˜ืŸ

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

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

ื“ื™ ืกืขืจื•ื•ืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืžื™ื˜ ื“ื™ ClickHouse ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ื– ื“ืขืจืœืื ื’ื˜ ืื™ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ื˜ื™ืฉ:

ื ืึธืžืขืŸ

ื•ื•ืขืจื˜

ื˜ืึธืŸ

ืงืึธื ืคื™ื’ื•ืจืึทื˜ื™ืึธืŸ

ื”ื“ื“: 40 ื’ื™ื’ืื‘ื™ื™ื˜
ื‘ืึทืจืึทืŸ: ืงืกื ื•ืžืงืกื’ื‘
ืคึผืจืึทืกืขืกืขืจ: ืงืึธืจ 2 2ื’ื”ื–

ืขืก ืื™ื– ื ื™ื™ื˜ื™ืง ืฆื• ื‘ืึทืฆืึธืœืŸ ื•ืคืžืขืจืงื–ืึทืžืงื™ื™ื˜ ืฆื• ื“ื™ ืขืฆื•ืช ืคึฟืึทืจ ืึทืคึผืขืจื™ื™ื˜ื™ื ื’ ื“ื™ ClickHouse ื“ืึทื˜ืึทื‘ื™ื™ืก (https://clickhouse.yandex/docs/ru/operations/tips/)

ืึทืœื’ืขืžื™ื™ื ืข ืกื™ืกื˜ืขื ื•ื•ื™ื™ื›ื•ื•ืืจื’

ืึทืก: Red Hat Enterprise Linux Server (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;

ืžื™ืจ ื ื•ืฆืŸ ืคืขืœื™ืงื™ื™ึทื˜ ืคึผืึทืจื˜ื™ืฉืึทื ื™ื ื’ (ื“ื•ืจืš ื—ื•ื“ืฉ) ืื•ืŸ ื’ืจืึทื ื•ืœืึทืจื™ื˜ื™ ืคื•ืŸ ืื™ื ื“ืขืงืก. ืึทืœืข ืคืขืœื“ืขืจ ืคึผืจืึทืงื˜ืึทืงืœื™ ืฉื˜ื™ืžืขืŸ ืฆื• IIS ืงืœืึธืฅ ืื™ื™ื ืกืŸ ืคึฟืึทืจ ืœืึธื’ื™ื ื’ ื”ื˜ื˜ืคึผ ืจื™ืงื•ื•ืขืก. ืกืขืคึผืขืจืึทื˜ืœื™, ืžื™ืจ ื˜ืึธืŸ ืึทื– ืขืก ื–ืขื ืขืŸ ื‘ืึทื–ื•ื ื“ืขืจ ืคืขืœื“ืขืจ ืคึฟืึทืจ ืกื˜ืึธืจื™ื ื’ utm-tags (ื–ื™ื™ ื–ืขื ืขืŸ ืคึผืึทืจืกื˜ ืื™ืŸ ื“ืขืจ ื‘ื™ื ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื™ื ืกืขืจื˜ื™ื ื’ ืื™ืŸ ื“ื™ ื˜ื™ืฉ ืคึฟื•ืŸ ื“ื™ ืึธื ืคึฟืจืขื’ ืฉื˜ืจื™ืงืœ ืคืขืœื“).

ืื•ื™ืš, ืขื˜ืœืขื›ืข ืกื™ืกื˜ืขื ืคืขืœื“ืขืจ ื–ืขื ืขืŸ ืฆื•ื’ืขื’ืขื‘ืŸ ืฆื• ื“ื™ ื˜ื™ืฉ ืฆื• ืงืจืึธื ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ืกื™ืกื˜ืขืžืขืŸ, ืงืึทืžืคึผืึธื•ื ืึทื ืฅ, ืกืขืจื•ื•ืขืจืก. ื–ืขืŸ ื“ื™ ื˜ื™ืฉ ืื•ื ื˜ืŸ ืคึฟืึทืจ ืึท ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืคื•ืŸ ื“ื™ ืคืขืœื“ืขืจ. ืื™ืŸ ืื™ื™ืŸ ื˜ื™ืฉ, ืžื™ืจ ืงืจืึธื ืœืึธื’ืก ืคึฟืึทืจ ืขื˜ืœืขื›ืข ืกื™ืกื˜ืขืžืขืŸ.

ื ืึธืžืขืŸ

ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’

ื‘ื™ื™ึทืฉืคึผื™ืœ

fld_app_name

ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธืŸ / ืกื™ืกื˜ืขื ื ืึธืžืขืŸ
ื’ื™ืœื˜ื™ืง ื•ื•ืขืจื˜ืŸ:

  • 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

ื“ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื™ืคืขืงื˜ื™ื•ื•ืœื™ ื‘ื•ื™ืขืŸ ื’ืจืึทืคืก ืื™ืŸ Grafana. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืงื•ืง ืจื™ืงื•ื•ืขืก ืคื•ืŸ ื“ื™ ืคืจืึธื ื˜ืขื ื“ ืคื•ืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืกื™ืกื˜ืขื. ื“ืึธืก ืื™ื– ืขื ืœืขืš ืฆื• ื“ื™ ืคึผืœืึทืฅ ื˜ืึธืžื‘ืึทื ืง ืื™ืŸ 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.

ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืคื•ืŸ ื’ืขื ื™ืฆื˜ ืงืึทืžืคึผืึธื•ื ืึทื ืฅ

FileBeat. ื˜ืจืึทื ืกืคืขืจื™ื ื’ ื˜ืขืงืข ืœืึธื’ืก

ื“ืขืจ ืงืึธืžืคึผืึธื ืขื ื˜ ื˜ืจืึทืงืก ืขื ื“ืขืจื•ื ื’ืขืŸ ืฆื• ืงืœืึธืฅ ื˜ืขืงืขืก ืื•ื™ืฃ ื“ื™ืกืง ืื•ืŸ ืคึผืึทืกื™ื– ื“ื™ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืฆื• 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 ืจื™ื™), ืคึผืึทืจืกื™ื ื’ ืื•ืŸ ื™ื ืกืขืจื˜ื™ื ื’ ื‘ืึทื˜ืฉืึทื– ืื™ืŸ ื“ื™ ืงืœื™ืงื›ืึธื•ืกืข ื“ืึทื˜ืึทื‘ื™ื™ืก.

ืคึฟืึทืจ ื™ื ืกืขืจืฉืึทืŸ ืื™ืŸ ClickHouse, ื“ื™ Logstash-output-clickhouse ืคึผืœื•ื’ื™ืŸ ืื™ื– ื’ืขื ื™ืฆื˜. ื“ื™ Logstash ืคึผืœื•ื’ื™ืŸ ื”ืื˜ ืึท ืžืขืงืึทื ื™ื–ืึทื ืคื•ืŸ ื‘ืขื˜ืŸ ื•ื•ื™ื“ืขืจ, ืึธื‘ืขืจ ืžื™ื˜ ืึท ืจืขื’ื•ืœืขืจ ืฉืึทื˜ื“ืึทื•ืŸ, ืขืก ืื™ื– ื‘ืขืกืขืจ ืฆื• ื”ืึทืœื˜ืŸ ื“ื™ ื“ื™ื ืกื˜ ื–ื™ืš. ื•ื•ืขืŸ ืกื˜ืึทืคึผื˜, ืึทืจื˜ื™ืงืœืขืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืึทืงื™ื•ืžื™ืึทืœื™ื™ื˜ื™ื“ ืื™ืŸ ื“ื™ RabbitMQ ืจื™ื™, ืึทื–ื•ื™ ืื•ื™ื‘ ื“ื™ ื”ืึทืœื˜ืŸ ืื™ื– ืคึฟืึทืจ ืึท ืœืึทื ื’ ืฆื™ื™ึทื˜, ืขืก ืื™ื– ื‘ืขืกืขืจ ืฆื• ื”ืึทืœื˜ืŸ Filebeats ืื•ื™ืฃ ื“ื™ ืกืขืจื•ื•ืขืจืก. ืื™ืŸ ืึท ืกื›ืขืžืข ื•ื•ื• 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 ืœืึธื’ืก, ืึทืคึผืึทื˜ืฉื™ ืื•ืŸ ื ื’ื™ื ืงืก ืœืึธื’ืก. ืคึฟืึทืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืœืึธื’ืก, ืื™ืŸ ื•ื•ืึธืก, ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืขืจืจืึธืจืก, ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืึทืจื˜ื™ืงืœืขืŸ, ื•ื•ืึธืจื ื™ื ื’ื– ื–ืขื ืขืŸ ืจืขืงืึธืจื“ืขื“, ืึท ื‘ืึทื–ื•ื ื“ืขืจ ื˜ื™ืฉ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืฆื•ื’ืขืฉื˜ืขืœื˜ ืžื™ื˜ ื“ื™ ืฆื•ื ืขืžืขืŸ ืกื˜ืจื•ืงื˜ื•ืจ (ื“ืขืจื•ื•ื™ื™ึทืœ ืื™ืŸ ื“ื™ ืคึผืœืึทืŸ ื‘ื™ื ืข).

ื•ื•ืขืŸ ื“ื™ื–ื™ื™ื ื™ื ื’ ืึท ื˜ื™ืฉ, ืขืก ืื™ื– ื–ื™ื™ืขืจ ื•ื•ื™ื›ื˜ื™ืง ืฆื• ื‘ืึทืฉืœื™ืกืŸ ืื•ื™ืฃ ื“ื™ ืขืจืฉื˜ื™ืง ืฉืœื™ืกืœ (ื“ื•ืจืš ื•ื•ืึธืก ื“ื™ ื“ืึทื˜ืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืื•ื™ืกื’ืขืฉื˜ืขืœื˜ ื‘ืขืฉืึทืก ืกื˜ืึธืจื™ื“ื–ืฉ). ื“ืขืจ ื’ืจืึทื“ ืคื•ืŸ ื“ืึทื˜ืŸ ืงืึทืžืคึผืจืขืฉืึทืŸ ืื•ืŸ ืึธื ืคึฟืจืขื’ ื’ื™ื›ืงื™ื™ึทื˜ ืึธืคืขื ื’ืขืŸ ืื•ื™ืฃ ื“ืขื. ืื™ืŸ ืื•ื ื“ื–ืขืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ื“ืขืจ ืฉืœื™ืกืœ ืื™ื–
ืกื“ืจ ืœื•ื™ื˜ (fld_app_name, fld_app_module, logdatetime)
ืึทื– ืื™ื–, ื“ื•ืจืš ื“ื™ ื ืึธืžืขืŸ ืคื•ืŸ ื“ื™ ืกื™ืกื˜ืขื, ื“ื™ ื ืึธืžืขืŸ ืคื•ืŸ ื“ื™ ืกื™ืกื˜ืขื ืงืึธืžืคึผืึธื ืขื ื˜ ืื•ืŸ ื“ื™ ื˜ืึธื’ ืคื•ืŸ ื“ื™ ื’ืขืฉืขืขื ื™ืฉ. ื˜ื›ื™ืœืขืก, ื“ืขืจ ื˜ืึธื’ ืคื•ืŸ ื“ื™ ื’ืขืฉืขืขื ื™ืฉ ื’ืขืงื•ืžืขืŸ ืขืจืฉื˜ืขืจ. ื ืึธืš ืžืึธื•ื•ื™ื ื’ ืขืก ืฆื• ื“ื™ ืœืขืฆื˜ืข ืึธืจื˜, ื“ื™ ืคึฟืจืื’ืŸ ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ืึทืจื‘ืขื˜ืŸ ืฆื•ื•ื™ื™ ืžืึธืœ ืึทื–ื•ื™ ืฉื ืขืœ. ื˜ืฉืึทื ื’ื™ื ื’ ื“ื™ ืขืจืฉื˜ื™ืง ืฉืœื™ืกืœ ื•ื•ืขื˜ ื“ืึทืจืคืŸ ืจื™ืงืจื™ื™ื™ื˜ื™ื ื’ ื“ื™ ื˜ื™ืฉ ืื•ืŸ ืจื™ืœืึธื•ื“ื™ื ื’ ื“ื™ ื“ืึทื˜ืŸ ืึทื–ื•ื™ ืึทื– ClickHouse ืฉื™ื™ึทืขืš-ืกืึธืจืฅ ื“ื™ ื“ืึทื˜ืŸ ืื•ื™ืฃ ื“ื™ืกืง. ื“ืึธืก ืื™ื– ืึท ืฉื•ื•ืขืจ ืึธืคึผืขืจืึทืฆื™ืข, ืึทื–ื•ื™ ืขืก ืื™ื– ืึท ื’ื•ื˜ืข ื’ืขื“ืึทื ืง ืฆื• ื˜ืจืึทื›ื˜ืŸ ืคื™ืœ ื•ื•ืขื’ืŸ ื•ื•ืึธืก ื–ืึธืœ ื–ื™ื™ืŸ ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืื™ืŸ ื“ื™ ืกืึธืจื˜ ืฉืœื™ืกืœ.

ืขืก ื–ืึธืœ ืื•ื™ืš ื–ื™ื™ืŸ ื‘ืืžืขืจืงื˜ ืึทื– ื“ื™ ื“ืึทื˜ืŸ ื˜ื™ืคึผ ืคื•ืŸ LowCardinality ืื™ื– ื’ืขื•ื•ืขืŸ ืœืขืคื™ืขืจืขืš ืื™ืŸ ื“ื™ ืœืขืฆื˜ืข ื•ื•ืขืจืกื™ืขืก. ื•ื•ืขืŸ ืื™ืจ ื ื•ืฆืŸ ืขืก, ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ืงืึทืžืคึผืจืขืกื˜ ื“ืึทื˜ืŸ ืื™ื– ื“ืจืึทืกื˜ื™ืงืœื™ ืจื™ื“ื•ืกื˜ ืคึฟืึทืจ ื“ื™ ืคืขืœื“ืขืจ ืžื™ื˜ ื ื™ื“ืขืจื™ืง ืงืึทืจื“ื™ื ืึทืœื™ื˜ื™ (ื•ื•ื™ื™ื ื™ืง ืึธืคึผืฆื™ืขืก).

ื•ื•ืขืจืกื™ืข 19.6 ืื™ื– ื“ืขืจื•ื•ื™ื™ึทืœ ืื™ืŸ ื ื•ืฆืŸ ืื•ืŸ ืžื™ืจ ืคึผืœืึทื ื™ืจืŸ ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืึทืคึผื“ื™ื™ื˜ื™ื ื’ ืฆื• ื“ื™ ืœืขืฆื˜ืข ื•ื•ืขืจืกื™ืข. ื–ื™ื™ ื”ืึธื‘ืŸ ืึทื–ืึท ื•ื•ื•ื ื“ืขืจืœืขืš ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ื•ื•ื™ ืึทื“ืึทืคึผื˜ื™ื•ื• ื’ืจืึทื ื•ืœืึทืจื™ื˜ื™, ืกืงื™ืคึผื™ื ื’ ื™ื ื“ื™ืกื™ื– ืื•ืŸ ื“ื™ DoubleDelta ืงืึธื“ืขืง, ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ.

ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜, ื‘ืขืฉืึทืก ื™ื ืกื˜ืึทืœื™ืจื•ื ื’, ื“ื™ ืœืึธื’ื™ื ื’ ืžื“ืจื’ื” ืื™ื– ื‘ืึทืฉื˜ื™ืžื˜ ืฆื• ืฉืคึผื•ืจ. ื“ื™ ืœืึธื’ืก ื–ืขื ืขืŸ ืจืึธื•ื˜ื™ื™ื˜ื™ื“ ืื•ืŸ ืึทืจื˜ืฉื™ื•ื•ืขื“, ืึธื‘ืขืจ ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜ ื–ื™ื™ ื™ืงืกืคึผืึทื ื“ ืึทืจื•ื™ืฃ ืฆื• ืึท ื’ื™ื’ืื‘ื™ื™ื˜. ืื•ื™ื‘ ืขืก ืื™ื– ื ื™ื˜ ื ื•ื™ื˜ื™ืง, ืื™ืจ ืงืขื ืขืŸ ืฉื˜ืขืœืŸ ื“ื™ ื•ื•ืืจืขื ื•ื ื’ ืžื“ืจื’ื”, ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ืขื ืงืœืึธืฅ ืื™ื– ื“ืจืึทืกื˜ื™ืงืœื™ ืจื™ื“ื•ืกื˜. ื“ื™ ืœืึธื’ื™ื ื’ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืื™ื– ื‘ืึทืฉื˜ื™ืžื˜ ืื™ืŸ ื“ื™ 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. ืฆื•ื ื‘ืึทื“ื•ื™ืขืจืŸ, FileBeat ื”ืื˜ ื ื™ืฉื˜ ืึท ืจืขื–ื•ืœื˜ืึทื˜ ืคึผืœื•ื’ื™ืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื’ืœื™ื™ึทืš ืฆื• RabbitMQ. ืื•ืŸ ืึทื–ืึท ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™, ืื•ื™ื‘ ืžืฉืคื˜ืŸ ืœื•ื™ื˜ ื“ื™ ืึทืจื•ื™ืกื’ืขื‘ืŸ ืื•ื™ืฃ ื–ื™ื™ืขืจ ื’ื™ื˜ื”ื•ื‘, ืื™ื– ื ื™ืฉื˜ ืคึผืœืึทื ื ืขื“ ืคึฟืึทืจ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ. ืขืก ืื™ื– ืึท ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ Kafka, ืึธื‘ืขืจ ืคึฟืึทืจ ืขื˜ืœืขื›ืข ืกื™ื‘ื” ืžื™ืจ ืงืขื ืขืŸ ื ื™ืฉื˜ ื ื•ืฆืŸ ืขืก ืื™ืŸ ืฉื˜ื•ื‘.
  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
    }
}

RabbitMQ. ืึธื ื–ืึธื’ ืจื™ื™

ื“ืขืจ ืงืึธืžืคึผืึธื ืขื ื˜ ืื™ื– ื’ืขื ื™ืฆื˜ ืฆื• ื‘ืึทืคืขืจ ืงืœืึธืฅ ืื™ื™ื ืกืŸ ืื™ืŸ ื“ื™ DMZ. ืจืขืงืึธืจื“ื™ื ื’ ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ื“ื•ืจืš ืึท ื‘ื™ื ื˜ืœ ืคื•ืŸ Filebeat โ†’ LogStash. ืœื™ื™ืขื ืขืŸ ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืคึฟื•ืŸ ืึทืจื•ื™ืก ื“ื™ DMZ ื“ื•ืจืš LogStash. ื•ื•ืขืŸ ืึทืคึผืขืจื™ื™ื˜ื™ื ื’ ื“ื•ืจืš RabboitMQ, ื•ื•ืขื’ืŸ 4 ื˜ื•ื™ื–ื ื˜ ืึทืจื˜ื™ืงืœืขืŸ ืคึผืขืจ ืกืขืงื•ื ื“ืข ื–ืขื ืขืŸ ืคึผืจืึทืกืขืกื˜.

ืึธื ื–ืึธื’ ืจื•ื˜ื™ื ื’ ืื™ื– ืงืึทื ืคื™ื’ื™ืขืจื“ ื“ื•ืจืš ืกื™ืกื˜ืขื ื ืึธืžืขืŸ, ื“"ื” ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ FileBeat ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื“ืึทื˜ืŸ. ืึทืœืข ืึทืจื˜ื™ืงืœืขืŸ ื’ื™ื™ืŸ ืฆื• ืื™ื™ืŸ ืจื™ื™. ืื•ื™ื‘ ืคึฟืึทืจ ืขื˜ืœืขื›ืข ืกื™ื‘ื” ื“ื™ ืจื™ื™ ื“ื™ื ืกื˜ ืื™ื– ืกื˜ืึทืคึผื˜, ื“ืึธืก ื•ื•ืขื˜ ื ื™ืฉื˜ ืคื™ืจืŸ ืฆื• ื“ื™ ืึธื ื•ื•ืขืจ ืคื•ืŸ ืึทืจื˜ื™ืงืœืขืŸ: FileBeats ื•ื•ืขื˜ ื‘ืึทืงื•ืžืขืŸ ืงืฉืจ ืขืจืจืึธืจืก ืื•ืŸ ื˜ืขืžืคึผืขืจืขืจืึทืœื™ ื•ืคื”ืขื ื’ืขืŸ ืฉื™ืงื˜. ืื•ืŸ 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"

ื’ืจืืคืื ื. ื“ืึทืฉื‘ืึธืจื“ื–

ื“ืขืจ ืงืึธืžืคึผืึธื ืขื ื˜ ืื™ื– ื’ืขื ื™ืฆื˜ ืฆื• ื•ื•ื™ื–ืฉื•ื•ืึทืœื™ื™ื– ืžืึธื ื™ื˜ืึธืจื™ื ื’ ื“ืึทื˜ืŸ. ืื™ืŸ ื“ืขื ืคืึทืœ, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ClickHouse ื“ืึทื˜ืึทืกืึธื•ืจืกืข ืคึฟืึทืจ Grafana 4.6+ ืคึผืœื•ื’ื™ืŸ. ืžื™ืจ ื”ืึธื‘ืŸ ืฆื• ื˜ื•ื•ื™ืง ืขืก ืึท ื‘ื™ืกืœ ืฆื• ืคึฟืึทืจื‘ืขืกืขืจืŸ ื“ื™ ืขืคืขืงื˜ื™ื•ื•ืงื™ื™ึทื˜ ืคื•ืŸ ืคึผืจืึทืกืขืกื™ื ื’ ืกืงืœ ืคื™ืœื˜ืขืจืก ืื•ื™ืฃ ื“ื™ ื“ืึทืฉื‘ืึธืจื“.

ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืžื™ืจ ื ื•ืฆืŸ ื•ื•ืขืจื™ืึทื‘ืึทืœื–, ืื•ืŸ ืื•ื™ื‘ ื–ื™ื™ ื–ืขื ืขืŸ ื ื™ืฉื˜ ืฉื˜ืขืœืŸ ืื™ืŸ ื“ื™ ืคื™ืœื˜ืขืจ ืคืขืœื“, ืžื™ืจ ื•ื•ืึธืœื˜ ื•ื•ื™ ืึทื– ืขืก ื–ืึธืœ ื ื™ืฉื˜ ื“ื–ืฉืขื ืขืจื™ื™ื˜ ืึท ืฆื•ืฉื˜ืึทื ื“ ืื™ืŸ ื“ื™ WHERE ืคื•ืŸ ื“ื™ ืคืึธืจืขื ( uriStem = ยป AND uriStem != ยป ). ืื™ืŸ ื“ืขื ืคืึทืœ, ClickHouse ื•ื•ืขื˜ ืœื™ื™ืขื ืขืŸ ื“ื™ 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

ืกืึธืฃ

ื“ืขืจ ืื•ื™ืกื–ืขืŸ ืคื•ืŸ ื“ื™ ClickHouse ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ื– ื’ืขื•ื•ืืจืŸ ืึท ืœืึทื ื“ืžืึทืจืง ื’ืขืฉืขืขื ื™ืฉ ืื™ืŸ ื“ื™ ืžืึทืจืง. ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืฉื•ื•ืขืจ ืฆื• ื™ืžืึทื“ื–ืฉืึทืŸ ืึทื– ืžื™ืจ, ื’ืึธืจ ืคืจื™ื™, ืื™ืŸ ืึท ืจืขื’ืข ื–ืขื ืขืŸ ืึทืจืžื“ ืžื™ื˜ ืึท ืฉื˜ืึทืจืง ืื•ืŸ ืคึผืจืึทืงื˜ื™ืฉ ื’ืขืฆื™ื™ึทื’ ืคึฟืึทืจ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื’ืจื•ื™ืก ื“ืึทื˜ืŸ. ืคื•ืŸ ืงื•ืจืก, ืžื™ื˜ ื™ื ืงืจื™ืกื™ื ื’ ื‘ืื“ืขืจืคืขื ื™ืฉืŸ (ืœืžืฉืœ, ืฉืึทืจื“ื™ื ื’ ืื•ืŸ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื• ืงื™ื™ืคืœ ืกืขืจื•ื•ืขืจืก), ื“ื™ ืกื›ืขืžืข ื•ื•ืขื˜ ื•ื•ืขืจืŸ ืžืขืจ ืงืึธืžืคึผืœื™ืฆื™ืจื˜. ืึธื‘ืขืจ ืื•ื™ืฃ ืขืจืฉื˜ืขืจ ื™ืžืคึผืจืขืกืกื™ืึธื ืก, ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ืขื ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ื– ื–ื™ื™ืขืจ ืึธื ื’ืขื ืขื. ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื–ืขืŸ ืึทื– ื“ื™ ืคึผืจืึธื“ื•ืงื˜ ืื™ื– ื’ืขืžืื›ื˜ "ืคึฟืึทืจ ืžืขื ื˜ืฉืŸ."

ืงืึทืžืคึผืขืจื“ ืžื™ื˜ ElasticSearch, ื“ื™ ืงืึธืก ืคื•ืŸ ืกื˜ืึธืจื™ื ื’ ืื•ืŸ ืคึผืจืึทืกืขืกื™ื ื’ ืœืึธื’ืก ืื™ื– ืขืกื˜ื™ืžืึทื˜ืขื“ ืฆื• ื–ื™ื™ืŸ ืจื™ื“ื•ืกื˜ ืžื™ื˜ ืคื™ื ืฃ ืฆื• ืฆืขืŸ ืžืืœ. ืื™ืŸ ืื ื“ืขืจืข ื•ื•ืขืจื˜ืขืจ, ืื•ื™ื‘ ืžื™ืจ ื•ื•ืึธืœื˜ ื”ืึธื‘ืŸ ืฆื• ืฉื˜ืขืœืŸ ืึทืจื•ื™ืฃ ืึท ืงื ื•ื™ืœ ืคื•ืŸ ืขื˜ืœืขื›ืข ืžืืฉื™ื ืขืŸ ืคึฟืึทืจ ื“ื™ ืงืจืึทื ื˜ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ืึทื˜ืŸ, ื•ื•ืขืŸ ื ื™ืฆืŸ ClickHouse, ืื™ื™ืŸ ื ื™ื“ืขืจื™ืง-ืžืึทื›ื˜ ืžืึทืฉื™ืŸ ืื™ื– ื’ืขื ื•ื’ ืคึฟืึทืจ ืื•ื ื“ื–. ื™ืึธ, ืคื•ืŸ ืงื•ืจืก, ElasticSearch ืื•ื™ืš ื”ืื˜ ืื•ื™ืฃ-ื“ื™ืกืง ื“ืึทื˜ืŸ ืงืึทืžืคึผืจืขืฉืึทืŸ ืžืขืงืึทื ื™ื–ืึทืžื– ืื•ืŸ ืื ื“ืขืจืข ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ื•ื•ืึธืก ืงืขื ืขืŸ ื‘ืื˜ื™ื™ื˜ื™ืง ืจืขื“ื•ืฆื™ืจืŸ ื“ื™ ืจื™ืกืึธืจืก ืงืึทื ืกืึทืžืฉืึทืŸ, ืึธื‘ืขืจ ืงืึทืžืคึผืขืจื“ ืžื™ื˜ ClickHouse, ื“ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืžืขืจ ื˜ื™ื™ึทืขืจ.

ืึธืŸ ืงื™ื™ืŸ ืกืคึผืขืฆื™ืขืœ ืึธืคึผื˜ื™ืžื™ื–ืึทื˜ื™ืึธื ืก ืคื•ืŸ ืื•ื ื“ื–ืขืจ ื˜ื™ื™ืœ, ืื•ื™ืฃ ืคืขืœื™ืงื™ื™ึทื˜ ืกืขื˜ื˜ื™ื ื’ืก, ืœืึธื•ื“ื™ื ื’ ื“ืึทื˜ืŸ ืื•ืŸ ืกืึทืœืขืงื˜ื™ื ื’ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ืึทืจื‘ืขื˜ ืžื™ื˜ ืึทืŸ ืึทืžื™ื™ื–ื™ื ื’ ื’ื™ื›ืงื™ื™ึทื˜. ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ืคื™ืœ ื“ืึทื˜ืŸ ื ืึธืš (ื•ื•ืขื’ืŸ 200 ืžื™ืœื™ืึธืŸ ืจืขืงืึธืจื“ืก), ืึธื‘ืขืจ ื“ืขืจ ืกืขืจื•ื•ืขืจ ื–ื™ืš ืื™ื– ืฉื•ื•ืึทืš. ืžื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ื“ืขื ื’ืขืฆื™ื™ึทื’ ืื™ืŸ ื“ืขืจ ืฆื•ืงื•ื ืคึฟื˜ ืคึฟืึทืจ ืื ื“ืขืจืข ืฆื•ื•ืขืงืŸ ื ื™ื˜ ืฉื™ื™ึทื›ื•ืช ืฆื• ืกื˜ืึธืจื™ื ื’ ืœืึธื’ืก. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืคึฟืึทืจ ืกื•ืฃ-ืฆื•-ืกื•ืฃ ืึทื ืึทืœื™ื˜ื™ืงืก, ืื™ืŸ ื“ื™ ืคืขืœื“ ืคื•ืŸ ื–ื™ื›ืขืจื”ื™ื™ื˜, ืžืึทืฉื™ืŸ ืœืขืจื ืขืŸ.

ืื™ืŸ ื“ื™ ืกื•ืฃ, ืึท ื‘ื™ืกืœ ื•ื•ืขื’ืŸ ื“ื™ ืคึผืจืึธืก ืื•ืŸ ืงืึธื ืก.

ืงืึธื ืก

  1. ืœืึธื•ื“ื™ื ื’ ืจืขืงืึธืจื“ืก ืื™ืŸ ื’ืจื•ื™ืก ื‘ืึทื˜ืฉืึทื–. ืื•ื™ืฃ ื“ื™ ืื™ื™ืŸ ื”ืึทื ื˜, ื“ืึธืก ืื™ื– ืึท ืฉื˜ืจื™ืš, ืึธื‘ืขืจ ืื™ืจ ื ืึธืš ื”ืึธื‘ืŸ ืฆื• ื ื•ืฆืŸ ื ืึธืš ืงืึทืžืคึผืึธื•ื ืึทื ืฅ ืคึฟืึทืจ ื‘ืึทืคืขืจื™ื ื’ ืจืขืงืึธืจื“ืก. ื“ืขื ืึทืจื‘ืขื˜ ืื™ื– ื ื™ื˜ ืฉื˜ืขื ื“ื™ืง ื’ืจื™ื ื’, ืึธื‘ืขืจ ื ืึธืš ืกืึธืœื•ื•ืึทื‘ืึทืœ. ืื•ืŸ ืื™ืš ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ืคืึทืจืคึผืึธืฉืขื˜ืขืจืŸ ื“ื™ ืกื›ืขืžืข.
  2. ืขื˜ืœืขื›ืข ืขืงื–ืึธื˜ื™ืฉ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™ ืึธื“ืขืจ ื ื™ื™ึท ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืึธืคื˜ ื‘ืจืขื›ืŸ ืื™ืŸ ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืขืก. ื“ืึธืก ืื™ื– ื“ื™ื™ึทื’ืข, ืจื™ื“ื•ืกื™ื ื’ ื“ื™ ืคืึทืจืœืึทื ื’ ืฆื• ืึทืคึผื’ืจื™ื™ื“ ืฆื• ืึท ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ื“ื™ ืงืึทืคืงืึท ื˜ื™ืฉ ืžืึธื˜ืึธืจ ืื™ื– ืึท ื–ื™ื™ืขืจ ื ื•ืฆื™ืง ืฉื˜ืจื™ืš ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืœื™ื™ืขื ืขืŸ ื’ืขืฉืขืขื ื™ืฉืŸ ืคื•ืŸ ืงืึทืคืงืึท ื’ืœื™ื™ึทืš ืึธืŸ ื™ืžืคึผืœืึทืžืขื ื™ื ื’ ืงืึธื ืกื•ืžืขืจืก. ืึธื‘ืขืจ ืื•ื™ื‘ ืžืฉืคื˜ืŸ ืœื•ื™ื˜ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ื™ืฉื•ื– ืื•ื™ืฃ ื“ื™ ื’ื™ื˜ื”ื•ื‘, ืžื™ืจ ื–ืขื ืขืŸ ื ืึธืš ืึธืคึผื’ืขื”ื™ื˜ ื ื™ื˜ ืฆื• ื ื•ืฆืŸ ื“ืขื ืžืึธื˜ืึธืจ ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข. ืึธื‘ืขืจ, ืื•ื™ื‘ ืื™ืจ ื˜ืึธืŸ ื ื™ื˜ ืคึผืœื•ืฆืขืžื“ื™ืง ื“ื–ืฉืขืกื˜ืฉืขืจื– ืฆื• ื“ื™ ื–ื™ื™ึทื˜ ืื•ืŸ ื ื•ืฆืŸ ื“ื™ ื”ื•ื™ืคึผื˜ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™, ืขืก ืึทืจื‘ืขื˜ ืกื˜ืึทื‘ื™ืœ.

ืคึผืจืึธืก

  1. ื˜ื•ื˜ ื ื™ืฉื˜ ืคึผืึทืžืขืœืขืš ืึทืจืึธืคึผ.
  2. ื ื™ื“ืขืจื™ืง ืคึผืึธื–ื™ืฆื™ืข ืฉื•ื•ืขืœ.
  3. ืึธืคึฟืŸ ืžืงื•ืจ.
  4. ืคืจื™ื™ึท.
  5. ื•ื•ืึธื’ ื’ืขื–ื•ื ื˜ (ืฉืึทืจื“ื™ื ื’ / ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ื™ืก ืคื•ืŸ ื“ื™ ืงืขืกื˜ืœ)
  6. ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืื™ืŸ ื“ื™ ืจืขื’ื™ืกื˜ืจื™ืจืŸ ืคื•ืŸ ืจื•ืกื™ืฉ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ืจืขืงืึทืžืขื ื“ื™ื“ ื“ื•ืจืš ื“ืขืจ ืžื™ื ื™ืกื˜ืขืจื™ื•ื ืคื•ืŸ ืงืึธืžื•ื ื™ืงืึทืฆื™ืข.
  7. ื“ื™ ื‘ื™ื™ึทื–ื™ื™ึทืŸ ืคื•ืŸ ื‘ืึทืึทืžื˜ืขืจ ืฉื˜ื™ืฆืŸ ืคื•ืŸ ื™ืึทื ื“ืขืงืก.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’