ಮಾನವರಿಗಾಗಿ ಕ್ಲಿಕ್‌ಹೌಸ್ ಡೇಟಾಬೇಸ್, ಅಥವಾ ಏಲಿಯನ್ ಟೆಕ್ನಾಲಜೀಸ್

ಅಲೆಕ್ಸಿ ಲಿಜುನೋವ್, MKB ಯ ಮಾಹಿತಿ ತಂತ್ರಜ್ಞಾನಗಳ ನಿರ್ದೇಶನಾಲಯದ ದೂರಸ್ಥ ಸೇವಾ ಚಾನೆಲ್‌ಗಳ ಸಾಮರ್ಥ್ಯ ಕೇಂದ್ರದ ಮುಖ್ಯಸ್ಥ

ಮಾನವರಿಗಾಗಿ ಕ್ಲಿಕ್‌ಹೌಸ್ ಡೇಟಾಬೇಸ್, ಅಥವಾ ಏಲಿಯನ್ ಟೆಕ್ನಾಲಜೀಸ್

ELK ಸ್ಟಾಕ್‌ಗೆ (ElasticSearch, Logstash, Kibana) ಪರ್ಯಾಯವಾಗಿ, ನಾವು ಕ್ಲಿಕ್‌ಹೌಸ್ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಲಾಗ್‌ಗಳಿಗಾಗಿ ಡೇಟಾ ಸ್ಟೋರ್ ಆಗಿ ಬಳಸುವ ಕುರಿತು ಸಂಶೋಧನೆ ನಡೆಸುತ್ತಿದ್ದೇವೆ.

ಈ ಲೇಖನದಲ್ಲಿ, ಕ್ಲಿಕ್‌ಹೌಸ್ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಬಳಸುವ ನಮ್ಮ ಅನುಭವ ಮತ್ತು ಪೈಲಟ್ ಕಾರ್ಯಾಚರಣೆಯ ಪ್ರಾಥಮಿಕ ಫಲಿತಾಂಶಗಳ ಬಗ್ಗೆ ನಾವು ಮಾತನಾಡಲು ಬಯಸುತ್ತೇವೆ. ಫಲಿತಾಂಶಗಳು ಆಕರ್ಷಕವಾಗಿವೆ ಎಂದು ಈಗಿನಿಂದಲೇ ಗಮನಿಸಬೇಕು.


ಮಾನವರಿಗಾಗಿ ಕ್ಲಿಕ್‌ಹೌಸ್ ಡೇಟಾಬೇಸ್, ಅಥವಾ ಏಲಿಯನ್ ಟೆಕ್ನಾಲಜೀಸ್

ಮುಂದೆ, ನಮ್ಮ ಸಿಸ್ಟಮ್ ಅನ್ನು ಹೇಗೆ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿದೆ ಮತ್ತು ಅದು ಯಾವ ಘಟಕಗಳನ್ನು ಒಳಗೊಂಡಿದೆ ಎಂಬುದನ್ನು ನಾವು ಹೆಚ್ಚು ವಿವರವಾಗಿ ವಿವರಿಸುತ್ತೇವೆ. ಆದರೆ ಈಗ ನಾನು ಒಟ್ಟಾರೆಯಾಗಿ ಈ ಡೇಟಾಬೇಸ್ ಬಗ್ಗೆ ಸ್ವಲ್ಪ ಮಾತನಾಡಲು ಬಯಸುತ್ತೇನೆ ಮತ್ತು ಅದು ಏಕೆ ಗಮನ ಕೊಡುವುದು ಯೋಗ್ಯವಾಗಿದೆ. ಕ್ಲಿಕ್‌ಹೌಸ್ ಡೇಟಾಬೇಸ್ ಯಾಂಡೆಕ್ಸ್‌ನಿಂದ ಹೆಚ್ಚಿನ ಕಾರ್ಯಕ್ಷಮತೆಯ ವಿಶ್ಲೇಷಣಾತ್ಮಕ ಸ್ತಂಭಾಕಾರದ ಡೇಟಾಬೇಸ್ ಆಗಿದೆ. ಇದನ್ನು Yandex ಸೇವೆಗಳಲ್ಲಿ ಬಳಸಲಾಗುತ್ತದೆ, ಆರಂಭದಲ್ಲಿ ಇದು Yandex.Metrica ಗಾಗಿ ಮುಖ್ಯ ಡೇಟಾ ಸಂಗ್ರಹಣೆಯಾಗಿದೆ. ಮುಕ್ತ ಮೂಲ ವ್ಯವಸ್ಥೆ, ಉಚಿತ. ಡೆವಲಪರ್‌ನ ದೃಷ್ಟಿಕೋನದಿಂದ, ಅವರು ಅದನ್ನು ಹೇಗೆ ಕಾರ್ಯಗತಗೊಳಿಸಿದರು ಎಂದು ನಾನು ಯಾವಾಗಲೂ ಆಶ್ಚರ್ಯ ಪಡುತ್ತೇನೆ, ಏಕೆಂದರೆ ಅದ್ಭುತವಾಗಿ ದೊಡ್ಡ ಡೇಟಾ ಇದೆ. ಮತ್ತು Metrica ನ ಬಳಕೆದಾರ ಇಂಟರ್ಫೇಸ್ ಸ್ವತಃ ತುಂಬಾ ಹೊಂದಿಕೊಳ್ಳುವ ಮತ್ತು ವೇಗವಾಗಿರುತ್ತದೆ. ಈ ಡೇಟಾಬೇಸ್‌ನ ಮೊದಲ ಪರಿಚಯದಲ್ಲಿ, ಅನಿಸಿಕೆ: “ಸರಿ, ಅಂತಿಮವಾಗಿ! ಜನರಿಗಾಗಿ ಮಾಡಿದ್ದು! ಅನುಸ್ಥಾಪನಾ ಪ್ರಕ್ರಿಯೆಯಿಂದ ಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ವಿನಂತಿಗಳನ್ನು ಕಳುಹಿಸುವುದರೊಂದಿಗೆ ಕೊನೆಗೊಳ್ಳುತ್ತದೆ.

ಈ ಡೇಟಾಬೇಸ್ ಅತ್ಯಂತ ಕಡಿಮೆ ಪ್ರವೇಶ ಮಿತಿಯನ್ನು ಹೊಂದಿದೆ. ಸರಾಸರಿ ನುರಿತ ಡೆವಲಪರ್ ಕೂಡ ಈ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಕೆಲವೇ ನಿಮಿಷಗಳಲ್ಲಿ ಸ್ಥಾಪಿಸಬಹುದು ಮತ್ತು ಅದನ್ನು ಬಳಸಲು ಪ್ರಾರಂಭಿಸಬಹುದು. ಎಲ್ಲವೂ ಸ್ಪಷ್ಟವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಲಿನಕ್ಸ್‌ಗೆ ಹೊಸಬರು ಸಹ ಅನುಸ್ಥಾಪನೆಯನ್ನು ತ್ವರಿತವಾಗಿ ನಿಭಾಯಿಸಬಹುದು ಮತ್ತು ಸರಳವಾದ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಮಾಡಬಹುದು. ಹಿಂದೆ, ಬಿಗ್ ಡೇಟಾ, ಹಡೂಪ್, ಗೂಗಲ್ ಬಿಗ್‌ಟೇಬಲ್, ಎಚ್‌ಡಿಎಫ್‌ಎಸ್ ಎಂಬ ಪದಗಳೊಂದಿಗೆ, ಸಾಮಾನ್ಯ ಡೆವಲಪರ್‌ಗೆ ಕೆಲವು ಟೆರಾಬೈಟ್‌ಗಳು, ಪೆಟಾಬೈಟ್‌ಗಳ ಬಗ್ಗೆ ಕಲ್ಪನೆ ಇತ್ತು, ಕೆಲವು ಅತಿಮಾನುಷರು ಈ ಸಿಸ್ಟಮ್‌ಗಳ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಮತ್ತು ಅಭಿವೃದ್ಧಿಯಲ್ಲಿ ತೊಡಗಿಸಿಕೊಂಡಿದ್ದಾರೆ, ನಂತರ ಕ್ಲಿಕ್‌ಹೌಸ್ ಆಗಮನದೊಂದಿಗೆ ಡೇಟಾಬೇಸ್, ನಾವು ಸರಳವಾದ, ಅರ್ಥವಾಗುವ ಸಾಧನವನ್ನು ಪಡೆದುಕೊಂಡಿದ್ದೇವೆ, ಅದರೊಂದಿಗೆ ನೀವು ಹಿಂದೆ ಸಾಧಿಸಲಾಗದ ಕಾರ್ಯಗಳನ್ನು ಪರಿಹರಿಸಬಹುದು. ಇದು ಕೇವಲ ಒಂದು ತಕ್ಕಮಟ್ಟಿಗೆ ಸರಾಸರಿ ಯಂತ್ರವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಸ್ಥಾಪಿಸಲು ಐದು ನಿಮಿಷಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ. ಅಂದರೆ, ನಾವು ಅಂತಹ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಪಡೆದುಕೊಂಡಿದ್ದೇವೆ, ಉದಾಹರಣೆಗೆ, MySql, ಆದರೆ ಶತಕೋಟಿ ದಾಖಲೆಗಳನ್ನು ಸಂಗ್ರಹಿಸುವುದಕ್ಕಾಗಿ ಮಾತ್ರ! SQL ಭಾಷೆಯೊಂದಿಗೆ ಒಂದು ನಿರ್ದಿಷ್ಟ ಸೂಪರ್-ಆರ್ಕೈವರ್. ಇದು ವಿದೇಶಿಯರ ಶಸ್ತ್ರಾಸ್ತ್ರಗಳನ್ನು ಜನರಿಗೆ ಹಸ್ತಾಂತರಿಸಿದಂತಿದೆ.

ನಮ್ಮ ಲಾಗಿಂಗ್ ಸಿಸ್ಟಮ್ ಬಗ್ಗೆ

ಮಾಹಿತಿಯನ್ನು ಸಂಗ್ರಹಿಸಲು, ಪ್ರಮಾಣಿತ ಸ್ವರೂಪದ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ IIS ಲಾಗ್ ಫೈಲ್‌ಗಳನ್ನು ಬಳಸಲಾಗುತ್ತದೆ (ನಾವು ಪ್ರಸ್ತುತ ಅಪ್ಲಿಕೇಶನ್ ಲಾಗ್‌ಗಳನ್ನು ಪಾರ್ಸಿಂಗ್ ಮಾಡುತ್ತಿದ್ದೇವೆ, ಆದರೆ ಪ್ರಾಯೋಗಿಕ ಹಂತದಲ್ಲಿ IIS ಲಾಗ್‌ಗಳನ್ನು ಸಂಗ್ರಹಿಸುವುದು ಮುಖ್ಯ ಗುರಿಯಾಗಿದೆ).

ವಿವಿಧ ಕಾರಣಗಳಿಗಾಗಿ, ನಾವು ELK ಸ್ಟಾಕ್ ಅನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ತ್ಯಜಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ, ಮತ್ತು ನಾವು ಲಾಗ್‌ಸ್ಟ್ಯಾಶ್ ಮತ್ತು ಫೈಲ್‌ಬೀಟ್ ಘಟಕಗಳನ್ನು ಬಳಸುವುದನ್ನು ಮುಂದುವರಿಸುತ್ತೇವೆ, ಅವುಗಳು ತಮ್ಮನ್ನು ತಾವು ಚೆನ್ನಾಗಿ ಸಾಬೀತುಪಡಿಸಿವೆ ಮತ್ತು ಸಾಕಷ್ಟು ವಿಶ್ವಾಸಾರ್ಹವಾಗಿ ಮತ್ತು ನಿರೀಕ್ಷಿತವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ.

ಸಾಮಾನ್ಯ ಲಾಗಿಂಗ್ ಯೋಜನೆಯನ್ನು ಕೆಳಗಿನ ಚಿತ್ರದಲ್ಲಿ ತೋರಿಸಲಾಗಿದೆ:

ಮಾನವರಿಗಾಗಿ ಕ್ಲಿಕ್‌ಹೌಸ್ ಡೇಟಾಬೇಸ್, ಅಥವಾ ಏಲಿಯನ್ ಟೆಕ್ನಾಲಜೀಸ್

ಕ್ಲಿಕ್‌ಹೌಸ್ ಡೇಟಾಬೇಸ್‌ಗೆ ಡೇಟಾವನ್ನು ಬರೆಯುವ ವೈಶಿಷ್ಟ್ಯವೆಂದರೆ ಅಪರೂಪದ (ಸೆಕೆಂಡಿಗೆ ಒಮ್ಮೆ) ದೊಡ್ಡ ಬ್ಯಾಚ್‌ಗಳಲ್ಲಿ ದಾಖಲೆಗಳ ಅಳವಡಿಕೆ. ಇದು, ಸ್ಪಷ್ಟವಾಗಿ, ನೀವು ಕ್ಲಿಕ್‌ಹೌಸ್ ಡೇಟಾಬೇಸ್‌ನೊಂದಿಗೆ ಮೊದಲ ಬಾರಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ನೀವು ಎದುರಿಸುವ ಅತ್ಯಂತ "ಸಮಸ್ಯಾತ್ಮಕ" ಭಾಗವಾಗಿದೆ: ಯೋಜನೆಯು ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಸಂಕೀರ್ಣವಾಗುತ್ತದೆ.
ಕ್ಲಿಕ್‌ಹೌಸ್‌ಗೆ ಡೇಟಾವನ್ನು ನೇರವಾಗಿ ಸೇರಿಸುವ LogStash ಗಾಗಿ ಪ್ಲಗಿನ್ ಇಲ್ಲಿ ಸಾಕಷ್ಟು ಸಹಾಯ ಮಾಡಿದೆ. ಈ ಘಟಕವನ್ನು ಡೇಟಾಬೇಸ್‌ನಂತೆಯೇ ಅದೇ ಸರ್ವರ್‌ನಲ್ಲಿ ನಿಯೋಜಿಸಲಾಗಿದೆ. ಆದ್ದರಿಂದ, ಸಾಮಾನ್ಯವಾಗಿ ಹೇಳುವುದಾದರೆ, ಇದನ್ನು ಮಾಡಲು ಶಿಫಾರಸು ಮಾಡುವುದಿಲ್ಲ, ಆದರೆ ಪ್ರಾಯೋಗಿಕ ದೃಷ್ಟಿಕೋನದಿಂದ, ಅದೇ ಸರ್ವರ್ನಲ್ಲಿ ನಿಯೋಜಿಸಿದಾಗ ಪ್ರತ್ಯೇಕ ಸರ್ವರ್ಗಳನ್ನು ಉತ್ಪಾದಿಸದಂತೆ. ಡೇಟಾಬೇಸ್‌ನೊಂದಿಗೆ ಯಾವುದೇ ವೈಫಲ್ಯಗಳು ಅಥವಾ ಸಂಪನ್ಮೂಲ ಸಂಘರ್ಷಗಳನ್ನು ನಾವು ಗಮನಿಸಿಲ್ಲ. ಹೆಚ್ಚುವರಿಯಾಗಿ, ದೋಷಗಳ ಸಂದರ್ಭದಲ್ಲಿ ಪ್ಲಗಿನ್ ಮರುಪ್ರಯತ್ನದ ಕಾರ್ಯವಿಧಾನವನ್ನು ಹೊಂದಿದೆ ಎಂದು ಗಮನಿಸಬೇಕು. ಮತ್ತು ದೋಷಗಳ ಸಂದರ್ಭದಲ್ಲಿ, ಪ್ಲಗಿನ್ ಸೇರಿಸಲಾಗದ ಡೇಟಾದ ಬ್ಯಾಚ್ ಅನ್ನು ಡಿಸ್ಕ್ಗೆ ಬರೆಯುತ್ತದೆ (ಫೈಲ್ ಫಾರ್ಮ್ಯಾಟ್ ಅನುಕೂಲಕರವಾಗಿದೆ: ಸಂಪಾದನೆಯ ನಂತರ, ನೀವು ಕ್ಲಿಕ್‌ಹೌಸ್-ಕ್ಲೈಂಟ್ ಬಳಸಿ ಸರಿಪಡಿಸಿದ ಬ್ಯಾಚ್ ಅನ್ನು ಸುಲಭವಾಗಿ ಸೇರಿಸಬಹುದು).

ಯೋಜನೆಯಲ್ಲಿ ಬಳಸಲಾದ ಸಾಫ್ಟ್‌ವೇರ್‌ನ ಸಂಪೂರ್ಣ ಪಟ್ಟಿಯನ್ನು ಕೋಷ್ಟಕದಲ್ಲಿ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ:

ಬಳಸಿದ ಸಾಫ್ಟ್‌ವೇರ್ ಪಟ್ಟಿ

ಶೀರ್ಷಿಕೆ

ವಿವರಣೆ

ವಿತರಣಾ ಲಿಂಕ್

NGINX

ಪೋರ್ಟ್‌ಗಳ ಮೂಲಕ ಪ್ರವೇಶವನ್ನು ನಿರ್ಬಂಧಿಸಲು ಮತ್ತು ದೃಢೀಕರಣವನ್ನು ಸಂಘಟಿಸಲು ರಿವರ್ಸ್-ಪ್ರಾಕ್ಸಿ

ಪ್ರಸ್ತುತ ಯೋಜನೆಯಲ್ಲಿ ಬಳಸಲಾಗುವುದಿಲ್ಲ

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

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

ಫೈಲ್‌ಬೀಟ್

ಫೈಲ್ ಲಾಗ್‌ಗಳ ವರ್ಗಾವಣೆ.

https://www.elastic.co/downloads/beats/filebeat (Windows 64bit ಗಾಗಿ ವಿತರಣಾ ಕಿಟ್).

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

ಲಾಗ್‌ಸ್ಟ್ಯಾಶ್

ಲಾಗ್ ಸಂಗ್ರಾಹಕ.

FileBeat ನಿಂದ ಲಾಗ್‌ಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು, ಹಾಗೆಯೇ RabbitMQ ಸರದಿಯಿಂದ ಲಾಗ್‌ಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ (DMZ ನಲ್ಲಿರುವ ಸರ್ವರ್‌ಗಳಿಗಾಗಿ.)

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

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

ಲಾಗ್‌ಸ್ಟ್ಯಾಶ್-ಔಟ್‌ಪುಟ್-ಕ್ಲಿಕ್‌ಹೌಸ್

ಬ್ಯಾಚ್‌ಗಳಲ್ಲಿ ಕ್ಲಿಕ್‌ಹೌಸ್ ಡೇಟಾಬೇಸ್‌ಗೆ ಲಾಗ್‌ಗಳನ್ನು ವರ್ಗಾಯಿಸಲು Loagstash ಪ್ಲಗಿನ್

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 ಗಾಗಿ "ಸಾಮಾನ್ಯ" rpm ಬಿಲ್ಡ್ಗಳು Yandex ರೆಪೊಸಿಟರಿಯಲ್ಲಿ ಕಾಣಿಸಿಕೊಂಡವು, ಆದ್ದರಿಂದ ನೀವು ಅವುಗಳನ್ನು ಬಳಸಲು ಪ್ರಯತ್ನಿಸಬಹುದು. ಅನುಸ್ಥಾಪನೆಯ ಸಮಯದಲ್ಲಿ, ನಾವು ಆಲ್ಟಿನಿಟಿ ನಿರ್ಮಿಸಿದ ಪ್ಯಾಕೇಜುಗಳನ್ನು ಬಳಸುತ್ತಿದ್ದೆವು.

ಗ್ರಾಫಾನಾ

ಲಾಗ್ ದೃಶ್ಯೀಕರಣ. ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌ಗಳನ್ನು ಹೊಂದಿಸಲಾಗುತ್ತಿದೆ

https://grafana.com/

https://grafana.com/grafana/download

Redhat & Centos(64 Bit) - ಇತ್ತೀಚಿನ ಆವೃತ್ತಿ

ಗ್ರಾಫಾನಾ 4.6+ ಗಾಗಿ ಕ್ಲಿಕ್‌ಹೌಸ್ ಡೇಟಾಸೋರ್ಸ್

ClickHouse ಡೇಟಾ ಮೂಲದೊಂದಿಗೆ Grafana ಗಾಗಿ ಪ್ಲಗಿನ್

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

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

ಲಾಗ್‌ಸ್ಟ್ಯಾಶ್

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

ಎರ್ಲಾಂಗ್ ರನ್ಟೈಮ್ (RabbitMQ ಗೆ ಅಗತ್ಯವಿದೆ)

ಎರ್ಲಾಂಗ್ ರನ್ಟೈಮ್. RabbitMQ ಕೆಲಸ ಮಾಡಲು ಅಗತ್ಯವಿದೆ

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

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

ಕ್ಲಿಕ್‌ಹೌಸ್ ಡೇಟಾಬೇಸ್‌ನೊಂದಿಗೆ ಸರ್ವರ್ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಈ ಕೆಳಗಿನ ಕೋಷ್ಟಕದಲ್ಲಿ ಪ್ರಸ್ತುತಪಡಿಸಲಾಗಿದೆ:

ಶೀರ್ಷಿಕೆ

ಮೌಲ್ಯವನ್ನು

ಹೇಳಿಕೆಯನ್ನು

ಸಂರಚನೆ

ಎಚ್‌ಡಿಡಿ: 40 ಜಿಬಿ
ರಾಮ್: 8GB
ಪ್ರೊಸೆಸರ್: ಕೋರ್ 2 2Ghz

ಕ್ಲಿಕ್‌ಹೌಸ್ ಡೇಟಾಬೇಸ್ ಅನ್ನು ನಿರ್ವಹಿಸುವ ಸಲಹೆಗಳಿಗೆ ಗಮನ ಕೊಡುವುದು ಅವಶ್ಯಕ (https://clickhouse.yandex/docs/ru/operations/tips/)

ಸಾಮಾನ್ಯ ಸಿಸ್ಟಮ್ ಸಾಫ್ಟ್‌ವೇರ್

OS: Red Hat Enterprise Linux ಸರ್ವರ್ (Maipo)

JRE (ಜಾವಾ 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 ಲಾಗ್ ನಮೂದುಗಳಿಗೆ ಅನುಗುಣವಾಗಿರುತ್ತವೆ. ಪ್ರತ್ಯೇಕವಾಗಿ, utm-ಟ್ಯಾಗ್‌ಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು ಪ್ರತ್ಯೇಕ ಕ್ಷೇತ್ರಗಳಿವೆ ಎಂದು ನಾವು ಗಮನಿಸುತ್ತೇವೆ (ಪ್ರಶ್ನೆ ಸ್ಟ್ರಿಂಗ್ ಕ್ಷೇತ್ರದಿಂದ ಟೇಬಲ್‌ಗೆ ಸೇರಿಸುವ ಹಂತದಲ್ಲಿ ಅವುಗಳನ್ನು ಪಾರ್ಸ್ ಮಾಡಲಾಗುತ್ತದೆ).

ಅಲ್ಲದೆ, ಸಿಸ್ಟಮ್ಗಳು, ಘಟಕಗಳು, ಸರ್ವರ್ಗಳ ಬಗ್ಗೆ ಮಾಹಿತಿಯನ್ನು ಸಂಗ್ರಹಿಸಲು ಹಲವಾರು ಸಿಸ್ಟಮ್ ಕ್ಷೇತ್ರಗಳನ್ನು ಟೇಬಲ್ಗೆ ಸೇರಿಸಲಾಗಿದೆ. ಈ ಕ್ಷೇತ್ರಗಳ ವಿವರಣೆಗಾಗಿ ಕೆಳಗಿನ ಕೋಷ್ಟಕವನ್ನು ನೋಡಿ. ಒಂದು ಕೋಷ್ಟಕದಲ್ಲಿ, ನಾವು ಹಲವಾರು ವ್ಯವಸ್ಥೆಗಳಿಗೆ ಲಾಗ್ಗಳನ್ನು ಸಂಗ್ರಹಿಸುತ್ತೇವೆ.

ಶೀರ್ಷಿಕೆ

ವಿವರಣೆ

ಉದಾಹರಣೆಗೆ

fld_app_name

ಅಪ್ಲಿಕೇಶನ್/ಸಿಸ್ಟಮ್ ಹೆಸರು
ಮಾನ್ಯ ಮೌಲ್ಯಗಳು:

  • site1.domain.com ಬಾಹ್ಯ ಸೈಟ್ 1
  • site2.domain.com ಬಾಹ್ಯ ಸೈಟ್ 2
  • ಆಂತರಿಕ-site1.domain.local ಆಂತರಿಕ ಸೈಟ್ 1

site1.domain.com

fld_app_module

ಸಿಸ್ಟಮ್ ಮಾಡ್ಯೂಲ್
ಮಾನ್ಯ ಮೌಲ್ಯಗಳು:

  • ವೆಬ್ - ವೆಬ್‌ಸೈಟ್
  • svc - ವೆಬ್ ಸೈಟ್ ಸೇವೆ
  • intgr - ಇಂಟಿಗ್ರೇಷನ್ ವೆಬ್ ಸೇವೆ
  • ಬೋ - ಅಡ್ಮಿನ್ (ಬ್ಯಾಕ್ ಆಫೀಸ್)

ವೆಬ್

fld_website_ಹೆಸರು

IIS ನಲ್ಲಿ ಸೈಟ್ ಹೆಸರು

ಒಂದು ಸರ್ವರ್‌ನಲ್ಲಿ ಹಲವಾರು ಸಿಸ್ಟಮ್‌ಗಳನ್ನು ನಿಯೋಜಿಸಬಹುದು, ಅಥವಾ ಒಂದು ಸಿಸ್ಟಮ್ ಮಾಡ್ಯೂಲ್‌ನ ಹಲವಾರು ನಿದರ್ಶನಗಳು

ವೆಬ್ ಮುಖ್ಯ

fld_server_name

ಸರ್ವರ್ ಹೆಸರು

web1.domain.com

fld_log_file_name

ಸರ್ವರ್‌ನಲ್ಲಿ ಲಾಗ್ ಫೈಲ್‌ಗೆ ಮಾರ್ಗ

ಸಿ: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.

ಬಳಸಿದ ಘಟಕಗಳ ವಿವರಣೆ

ಫೈಲ್‌ಬೀಟ್. ಫೈಲ್ ಲಾಗ್‌ಗಳನ್ನು ವರ್ಗಾಯಿಸಲಾಗುತ್ತಿದೆ

ಈ ಘಟಕವು ಡಿಸ್ಕ್‌ನಲ್ಲಿ ಲಾಗ್ ಫೈಲ್‌ಗಳಿಗೆ ಬದಲಾವಣೆಗಳನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಮಾಹಿತಿಯನ್ನು ಲಾಗ್‌ಸ್ಟ್ಯಾಶ್‌ಗೆ ರವಾನಿಸುತ್ತದೆ. ಲಾಗ್ ಫೈಲ್‌ಗಳನ್ನು ಬರೆಯಲಾದ ಎಲ್ಲಾ ಸರ್ವರ್‌ಗಳಲ್ಲಿ ಸ್ಥಾಪಿಸಲಾಗಿದೆ (ಸಾಮಾನ್ಯವಾಗಿ 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: ~

ಲಾಗ್‌ಸ್ಟ್ಯಾಶ್. ಲಾಗ್ ಕಲೆಕ್ಟರ್

ಈ ಘಟಕವನ್ನು FileBeat ನಿಂದ ಲಾಗ್ ನಮೂದುಗಳನ್ನು ಸ್ವೀಕರಿಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ (ಅಥವಾ RabbitMQ ಕ್ಯೂ ಮೂಲಕ), ಕ್ಲಿಕ್‌ಹೌಸ್ ಡೇಟಾಬೇಸ್‌ಗೆ ಬ್ಯಾಚ್‌ಗಳನ್ನು ಪಾರ್ಸಿಂಗ್ ಮತ್ತು ಸೇರಿಸುವುದು.

ಕ್ಲಿಕ್‌ಹೌಸ್‌ಗೆ ಅಳವಡಿಕೆಗಾಗಿ, ಲಾಗ್‌ಸ್ಟಾಶ್-ಔಟ್‌ಪುಟ್-ಕ್ಲಿಕ್‌ಹೌಸ್ ಪ್ಲಗಿನ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ಲಾಗ್‌ಸ್ಟ್ಯಾಶ್ ಪ್ಲಗಿನ್ ವಿನಂತಿಯನ್ನು ಮರುಪ್ರಯತ್ನಿಸುವ ಕಾರ್ಯವಿಧಾನವನ್ನು ಹೊಂದಿದೆ, ಆದರೆ ನಿಯಮಿತ ಸ್ಥಗಿತಗೊಳಿಸುವಿಕೆಯೊಂದಿಗೆ, ಸೇವೆಯನ್ನು ಸ್ವತಃ ನಿಲ್ಲಿಸುವುದು ಉತ್ತಮವಾಗಿದೆ. ನಿಲ್ಲಿಸಿದಾಗ, ಸಂದೇಶಗಳನ್ನು RabbitMQ ಕ್ಯೂನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ಸ್ಟಾಪ್ ದೀರ್ಘಕಾಲದವರೆಗೆ ಆಗಿದ್ದರೆ, ನಂತರ ಸರ್ವರ್‌ಗಳಲ್ಲಿ ಫೈಲ್‌ಬೀಟ್‌ಗಳನ್ನು ನಿಲ್ಲಿಸುವುದು ಉತ್ತಮ. RabbitMQ ಅನ್ನು ಬಳಸದ ಯೋಜನೆಯಲ್ಲಿ (ಸ್ಥಳೀಯ ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ, ಫೈಲ್‌ಬೀಟ್ ನೇರವಾಗಿ ಲಾಗ್‌ಸ್ಟಾಶ್‌ಗೆ ಲಾಗ್‌ಗಳನ್ನು ಕಳುಹಿಸುತ್ತದೆ), ಫೈಲ್‌ಬೀಟ್‌ಗಳು ಸಾಕಷ್ಟು ಸ್ವೀಕಾರಾರ್ಹ ಮತ್ತು ಸುರಕ್ಷಿತವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ, ಆದ್ದರಿಂದ ಅವರಿಗೆ ಔಟ್‌ಪುಟ್‌ನ ಅಲಭ್ಯತೆಯು ಪರಿಣಾಮಗಳಿಲ್ಲದೆ ಹಾದುಹೋಗುತ್ತದೆ.

ಉದಾಹರಣೆ ಸಂರಚನೆಯು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:

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

ಪೈಪ್ಲೈನ್ಗಳು.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 ಲಾಗ್‌ಗಳು, ಅಪಾಚೆ ಮತ್ತು 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

ಲಾಗ್‌ಸ್ಟ್ಯಾಶ್. FileBeat ನಿಂದ RabbitMQ ಕ್ಯೂಗೆ ರೂಟರ್ ಅನ್ನು ಲಾಗ್ ಮಾಡಿ

FileBeat ನಿಂದ RabbitMQ ಸರತಿಗೆ ಬರುವ ಲಾಗ್‌ಗಳನ್ನು ರೂಟ್ ಮಾಡಲು ಈ ಘಟಕವನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ಇಲ್ಲಿ ಎರಡು ಅಂಶಗಳಿವೆ:

  1. ದುರದೃಷ್ಟವಶಾತ್, FileBeat ನೇರವಾಗಿ RabbitMQ ಗೆ ಬರೆಯಲು ಔಟ್‌ಪುಟ್ ಪ್ಲಗಿನ್ ಅನ್ನು ಹೊಂದಿಲ್ಲ. ಮತ್ತು ಅಂತಹ ಕಾರ್ಯವನ್ನು, ಅವರ ಗಿಥಬ್‌ನಲ್ಲಿನ ಸಮಸ್ಯೆಯ ಮೂಲಕ ನಿರ್ಣಯಿಸುವುದು, ಅನುಷ್ಠಾನಕ್ಕೆ ಯೋಜಿಸಲಾಗಿಲ್ಲ. ಕಾಫ್ಕಾಗೆ ಪ್ಲಗಿನ್ ಇದೆ, ಆದರೆ ಕೆಲವು ಕಾರಣಗಳಿಂದ ನಾವು ಅದನ್ನು ಮನೆಯಲ್ಲಿ ಬಳಸಲಾಗುವುದಿಲ್ಲ.
  2. DMZ ನಲ್ಲಿ ದಾಖಲೆಗಳನ್ನು ಸಂಗ್ರಹಿಸುವ ಅವಶ್ಯಕತೆಗಳಿವೆ. ಅವುಗಳ ಆಧಾರದ ಮೇಲೆ, ಲಾಗ್‌ಗಳನ್ನು ಮೊದಲು ಕ್ಯೂಗೆ ಸೇರಿಸಬೇಕು ಮತ್ತು ನಂತರ ಲಾಗ್‌ಸ್ಟಾಶ್ ಹೊರಗಿನಿಂದ ಸರದಿಯಿಂದ ನಮೂದುಗಳನ್ನು ಓದುತ್ತದೆ.

ಆದ್ದರಿಂದ, 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
    }
}

ಮೊಲMQ. ಸಂದೇಶ ಕ್ಯೂ

DMZ ನಲ್ಲಿ ಲಾಗ್ ನಮೂದುಗಳನ್ನು ಬಫರ್ ಮಾಡಲು ಈ ಘಟಕವನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ಫೈಲ್‌ಬೀಟ್ → ಲಾಗ್‌ಸ್ಟ್ಯಾಶ್ ಗುಂಪಿನ ಮೂಲಕ ರೆಕಾರ್ಡಿಂಗ್ ಮಾಡಲಾಗುತ್ತದೆ. LogStash ಮೂಲಕ DMZ ಹೊರಗಿನಿಂದ ಓದುವಿಕೆಯನ್ನು ಮಾಡಲಾಗುತ್ತದೆ. RabboitMQ ಮೂಲಕ ಕಾರ್ಯನಿರ್ವಹಿಸುವಾಗ, ಪ್ರತಿ ಸೆಕೆಂಡಿಗೆ ಸುಮಾರು 4 ಸಾವಿರ ಸಂದೇಶಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲಾಗುತ್ತದೆ.

ಸಂದೇಶ ರೂಟಿಂಗ್ ಅನ್ನು ಸಿಸ್ಟಮ್ ಹೆಸರಿನಿಂದ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿದೆ, ಅಂದರೆ ಫೈಲ್‌ಬೀಟ್ ಕಾನ್ಫಿಗರೇಶನ್ ಡೇಟಾವನ್ನು ಆಧರಿಸಿದೆ. ಎಲ್ಲಾ ಸಂದೇಶಗಳು ಒಂದು ಸಾಲಿಗೆ ಹೋಗುತ್ತವೆ. ಕೆಲವು ಕಾರಣಗಳಿಗಾಗಿ ಕ್ಯೂಯಿಂಗ್ ಸೇವೆಯನ್ನು ನಿಲ್ಲಿಸಿದರೆ, ಇದು ಸಂದೇಶಗಳ ನಷ್ಟಕ್ಕೆ ಕಾರಣವಾಗುವುದಿಲ್ಲ: ಫೈಲ್‌ಬೀಟ್ಸ್ ಸಂಪರ್ಕ ದೋಷಗಳನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ ಮತ್ತು ಕಳುಹಿಸುವಿಕೆಯನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ಅಮಾನತುಗೊಳಿಸುತ್ತದೆ. ಮತ್ತು ಸರದಿಯಿಂದ ಓದುವ ಲಾಗ್‌ಸ್ಟ್ಯಾಶ್ ನೆಟ್‌ವರ್ಕ್ ದೋಷಗಳನ್ನು ಸಹ ಸ್ವೀಕರಿಸುತ್ತದೆ ಮತ್ತು ಸಂಪರ್ಕವನ್ನು ಮರುಸ್ಥಾಪಿಸಲು ಕಾಯುತ್ತದೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಡೇಟಾವನ್ನು ಇನ್ನು ಮುಂದೆ ಡೇಟಾಬೇಸ್‌ಗೆ ಬರೆಯಲಾಗುವುದಿಲ್ಲ.

ಸರತಿ ಸಾಲುಗಳನ್ನು ರಚಿಸಲು ಮತ್ತು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ಈ ಕೆಳಗಿನ ಸೂಚನೆಗಳನ್ನು ಬಳಸಲಾಗುತ್ತದೆ:

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 ಡೇಟಾಸೋರ್ಸ್ ಅನ್ನು ಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ. ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌ನಲ್ಲಿ SQL ಫಿಲ್ಟರ್‌ಗಳನ್ನು ಸಂಸ್ಕರಿಸುವ ದಕ್ಷತೆಯನ್ನು ಸುಧಾರಿಸಲು ನಾವು ಅದನ್ನು ಸ್ವಲ್ಪಮಟ್ಟಿಗೆ ತಿರುಚಬೇಕಾಗಿತ್ತು.

ಉದಾಹರಣೆಗೆ, ನಾವು ವೇರಿಯೇಬಲ್‌ಗಳನ್ನು ಬಳಸುತ್ತೇವೆ ಮತ್ತು ಅವುಗಳನ್ನು ಫಿಲ್ಟರ್ ಕ್ಷೇತ್ರದಲ್ಲಿ ಹೊಂದಿಸದಿದ್ದರೆ, ಫಾರ್ಮ್‌ನ ಎಲ್ಲೆಲ್ಲಿ ( uriStem = » ಮತ್ತು uriStem != » ) ಸ್ಥಿತಿಯನ್ನು ರಚಿಸದಿರಲು ನಾವು ಬಯಸುತ್ತೇವೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ClickHouse ಯುರಿಸ್ಟೆಮ್ ಕಾಲಮ್ ಅನ್ನು ಓದುತ್ತದೆ. ಸಾಮಾನ್ಯವಾಗಿ, ನಾವು ವಿಭಿನ್ನ ಆಯ್ಕೆಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿದ್ದೇವೆ ಮತ್ತು ಅಂತಿಮವಾಗಿ ಪ್ಲಗಿನ್ ಅನ್ನು ಸರಿಪಡಿಸಿದ್ದೇವೆ ($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. Yandex ನಿಂದ ಅಧಿಕೃತ ಬೆಂಬಲದ ಉಪಸ್ಥಿತಿ.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ