Aleksey Lizunov, Lehiben'ny Foiben'ny fahaiza-manao ho an'ny fantsona serivisy lavitra an'ny Direction of Information Technologies an'ny MKB
Ho solon'ny ELK stack (ElasticSearch, Logstash, Kibana), dia manao fikarohana momba ny fampiasana ny angona ClickHouse ho toy ny fivarotana data ho an'ny logs.
Ato amin'ity lahatsoratra ity, te hiresaka momba ny traikefanay tamin'ny fampiasana ny angon-drakitra ClickHouse sy ny vokatra vonjimaika tamin'ny asa mpanamory izahay. Marihina avy hatrany fa nahavariana ny vokatra azo.
Manaraka izany dia holazainay amin'ny antsipiriany kokoa ny fomba nandrafetana ny rafitra misy anay, ary inona ny singa ao anatiny. Fa ankehitriny aho dia te hiresaka kely momba an'io tahiry io amin'ny ankapobeny, ary nahoana no tokony hojerena. Ny angon-drakitra ClickHouse dia angona tsanganana famakafakana avo lenta avy amin'ny Yandex. Ampiasaina amin'ny serivisy Yandex izy io, amin'ny voalohany dia io no fitahirizana angon-drakitra lehibe ho an'ny Yandex.Metrica. Rafitra loharano misokatra, maimaim-poana. Avy amin'ny fomba fijerin'ny mpamorona, nanontany tena foana aho hoe ahoana no nampiharan'izy ireo izany, satria misy angona goavana be. Ary ny interface interface an'ny Metrica mihitsy dia tena mora sy haingana. Amin'ny fahafantarana voalohany an'io tahiry io, ny fahatsapana dia: "Eny, farany! Natao ho an'ny vahoaka! Manomboka amin'ny dingana fametrahana ary mifarana amin'ny fandefasana fangatahana.
Ity tahiry ity dia manana tokonam-pidirana ambany dia ambany. Na dia mpandrindra mahay salantsalany aza dia afaka mametraka ity angon-drakitra ity ao anatin'ny minitra vitsy ary manomboka mampiasa izany. Miasa mazava ny zava-drehetra. Na ny olona vaovao amin'ny Linux aza dia afaka mitantana haingana ny fametrahana ary manao ny asa tsotra indrindra. Raha teo aloha, miaraka amin'ny teny hoe Big Data, Hadoop, Google BigTable, HDFS, mpandrindra tsotra dia nanana hevitra fa momba ny terabytes sasany, petabytes, fa misy olona ambony sasany mirotsaka amin'ny sehatra sy fampandrosoana ho an'ireo rafitra ireo, avy eo amin'ny fahatongavan'ny ClickHouse. database, nahazo fitaovana tsotra sy azo takarina izay ahafahanao mamaha ireo asa maro tsy tratra teo aloha. Mila milina iray salantsalany fotsiny ary dimy minitra ny fametrahana azy. Izany hoe, nahazo angon-drakitra toy ny MySql, ohatra, fa mba hitehirizana rakitra an'arivony tapitrisa fotsiny! Super-archiver sasany miaraka amin'ny fiteny SQL. Toy ny hoe nomena ny fitaovam-piadian'ny vahiny ny olona.
Momba ny rafitra fanoratana anay
Mba hanangonana vaovao dia ampiasaina ny rakitra log IIS amin'ny rindranasan-tranonkala amin'ny endrika manara-penitra (eo am-pamakiana ny diarin'ny rindranasa ihany koa izahay amin'izao fotoana izao, fa ny tena tanjona amin'ny dingan'ny mpanamory dia ny fanangonana ny logs IIS).
Noho ny antony samihafa dia tsy afaka nandao tanteraka ny stack ELK izahay, ary manohy mampiasa ny singa LogStash sy Filebeat izahay, izay nanaporofo tsara ny tenany ary miasa azo antoka sy azo antoka.
Ny rafitra fanoratana ankapobe dia aseho amin'ny sary etsy ambany:
Ny endri-panoratana data amin'ny angon-drakitra ClickHouse dia tsy dia matetika (indray mandeha isan-tsegondra) ny fampidirana rakitsoratra amina andiany lehibe. Ity, raha ny fahitana azy, no ampahany "olana" indrindra hitanao rehefa niaina niasa tamin'ny angon-drakitra ClickHouse ianao: lasa sarotra kokoa ny tetika.
Ny plugin ho an'ny LogStash, izay mampiditra mivantana ny angona ao amin'ny ClickHouse, dia nanampy betsaka teto. Ity singa ity dia apetraka amin'ny lohamilina mitovy amin'ny angon-drakitra. Noho izany, amin'ny ankapobeny dia tsy soso-kevitra ny hanao izany, fa amin'ny fomba fijery azo ampiharina, mba tsy hamokatra mpizara misaraka raha apetraka amin'ny mpizara iray ihany. Tsy nahita tsy fahombiazana na fifandirana momba ny loharanon-karena tamin'ny angon-drakitra izahay. Ankoatr'izay, tokony ho marihina fa ny plugin dia manana mekanika andrana indray raha misy hadisoana. Ary raha misy lesoka, ny plugin dia manoratra amin'ny kapila misy angon-drakitra tsy azo ampidirina (mety ny format file: aorian'ny fanitsiana dia azonao atao mora foana ny mampiditra ny ampahany voahitsy amin'ny fampiasana clickhouse-client).
Ny lisitra feno amin'ny rindrambaiko ampiasaina amin'ny drafitra dia aseho amin'ny tabilao:
Lisitry ny rindrambaiko ampiasaina
anarana
famaritana
Rohy fanapariahana
NGINX
Reverse-proxy mba hamerana ny fidirana amin'ny seranana sy handamina ny fanomezan-dàlana
Tsy ampiasaina amin'ny drafitra amin'izao fotoana izao
FileBeat
Famindrana ny diarin'ny rakitra.
logstash
mpanangona log.
Ampiasaina hanangonana logs avy amin'ny FileBeat, ary koa hanangonana logs avy amin'ny filaharana RabbitMQ (ho an'ireo mpizara ao amin'ny DMZ.)
Logstash-output-clickhouse
Loagstash plugin amin'ny famindrana logs amin'ny angon-drakitra ClickHouse amin'ny andiany
/usr/share/logstash/bin/logstash-plugin mametraka logstash-output-clickhouse
/usr/share/logstash/bin/logstash-plugin mametraka logstash-filter-prune
/usr/share/logstash/bin/logstash-plugin mametraka logstash-filter-multiline
clickhouse
fitahirizana log
Fanamarihana. Nanomboka tamin'ny Aogositra 2018, ny fananganana rpm "ara-dalàna" ho an'ny RHEL dia niseho tao amin'ny tahiry Yandex, mba hahafahanao manandrana mampiasa azy ireo. Tamin'ny fotoana fametrahana dia nampiasa fonosana namboarin'i Altinity izahay.
grafana
Log visualization. Fametrahana dashboards
Redhat & Centos(64 Bit) - kinova farany
Angon-drakitra ClickHouse ho an'ny Grafana 4.6+
Plugin ho an'ny Grafana miaraka amin'ny loharano angona ClickHouse
logstash
Log ny router avy amin'ny FileBeat mankany amin'ny filaharana RabbitMQ.
Fanamarihana. Indrisy anefa fa tsy mivoaka mivantana amin'ny RabbitMQ ny FileBeat, noho izany dia ilaina ny rohy manelanelana amin'ny endrika Logstash
Ny bitro MQ
filaharana hafatra. Ity no log buffer ao amin'ny DMZ
Erlang Runtime (Ilaina amin'ny RabbitMQ)
Erlang runtime. Ilaina ny RabbitMQ mba hiasa
Ny fandrindrana ny mpizara miaraka amin'ny angon-drakitra ClickHouse dia aseho amin'ity tabilao manaraka ity:
anarana
zava-dehibe
fanamarihana
fanahafana
HDD: 40 GB
RAM: 8GB
Processeur: Core 2 2Ghz
Ilaina ny mandinika ny toro-hevitra amin'ny fampandehanana ny angona ClickHouse (
Software rafitra ankapobeny
OS: Red Hat Enterprise Linux Server (Maipo)
JRE (Java 8)
Araka ny hitanao dia toeram-piasana mahazatra ity.
Ny firafitry ny latabatra fitehirizana dia toy izao manaraka izao:
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;
Mampiasa fizarazarana default izahay (amin'ny isam-bolana) sy ny index granularity. Ny saha rehetra dia mifanandrify amin'ny fidirana amin'ny log IIS ho an'ny fangatahana http. Marihina manokana fa misy saha misaraka amin'ny fitehirizana utm-tags (fampidirana ao amin'ny tabilao avy amin'ny sahan'ny string query izy ireo).
Ary koa, sahan'ny rafitra maromaro no nampiana teo amin'ny latabatra mba hitahiry vaovao momba ny rafitra, singa, mpizara. Jereo ny tabilao etsy ambany raha mila fanazavana momba ireo saha ireo. Ao amin'ny latabatra iray, dia mitahiry logs ho an'ny rafitra maromaro izahay.
anarana
famaritana
ohatra
fld_app_name
Anaran'ny fampiharana/rafitra
Sanda manankery:
- site1.domain.com Site ivelany 1
- site2.domain.com Site ivelany 2
- internal-site1.domain.local Site anatiny 1
site1.domain.com
fld_app_module
Module rafitra
Sanda manankery:
- tranonkala - Tranonkala
- svc - serivisy tranonkala
- intgr - Fampidirana Web Service
- bo - Admin (BackOffice)
Malagasy
fld_website_name
Anaran'ny tranokala amin'ny IIS
Rafitra maromaro no azo apetraka amin'ny mpizara iray, na ohatra maromaro amin'ny maody rafitra iray
web main
fld_server_name
Anaran'ny mpizara
web1.domain.com
fld_log_file_name
Lalana mankany amin'ny rakitra log amin'ny mpizara
C:inetpublogsLogFiles
W3SVC1u_ex190711.log
Izany dia ahafahanao manangana sary amin'ny fomba mahomby amin'ny Grafana. Ohatra, jereo ny fangatahana avy any amin'ny faran'ny rafitra iray manokana. Mitovy amin'ny kaontera tranokala ao amin'ny Yandex.Metrica izany.
Ireto misy antontan'isa momba ny fampiasana ny angon-drakitra nandritra ny roa volana.
Isan'ny firaketana rava araka ny rafitra sy ny singany
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.)
Ny habetsaky ny angona ao amin'ny kapila
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.
Ny haavon'ny fanerena angona amin'ny tsanganana
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.
Famaritana ny singa ampiasaina
FileBeat. Mamindra ny diarin'ny rakitra
Ity singa ity dia manara-maso ny fanovana amin'ny firaketana rakitra amin'ny kapila ary mampita ny fampahalalana amin'ny LogStash. Apetraka amin'ny lohamilina rehetra misy ny rakitra log (matetika IIS). Miasa amin'ny fomba rambony (izany hoe mamindra ireo rakitsoratra fanampiny amin'ny rakitra ihany). Saingy misaraka dia azo amboarina mba hamindra rakitra manontolo. Tena ilaina izany rehefa mila misintona angona tamin'ny volana lasa ianao. Apetraho ao anaty lahatahiry fotsiny ny rakitra log dia hovakiny manontolo.
Rehefa mijanona ny serivisy dia tsy afindra any amin'ny fitahirizana intsony ny angona.
Ohatra config dia toy izao:
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. Log collector
Ity singa ity dia natao handraisana ny fidirana amin'ny log avy amin'ny FileBeat (na amin'ny alàlan'ny filaharana RabbitMQ), manara-maso sy mampiditra batch ao amin'ny tahiry ClickHouse.
Ho an'ny fampidirana ao amin'ny ClickHouse dia ampiasaina ny plugin Logstash-output-clickhouse. Ny plugin Logstash dia manana mekanika andrana indray, saingy amin'ny fanakatonana tsy tapaka dia tsara kokoa ny manajanona ny serivisy. Rehefa mijanona dia miangona ao amin'ny filaharana RabbitMQ ny hafatra, ka raha maharitra ny fijanonana dia tsara kokoa ny manajanona ny Filebeats amin'ny mpizara. Ao amin'ny rafitra iray izay tsy ampiasaina ny RabbitMQ (amin'ny tambajotra eo an-toerana, Filebeat dia mandefa logstash mivantana amin'ny Logstash), ny Filebeats dia miasa azo ekena sy azo antoka, ka ho azy ireo ny tsy fisian'ny vokatra dia mandalo tsy misy vokany.
Ohatra config dia toy izao:
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"
clickhouse. fitahirizana log
Ny logs ho an'ny rafitra rehetra dia voatahiry ao anaty latabatra iray (jereo eo am-piandohan'ny lahatsoratra). Natao hitahiry vaovao momba ny fangatahana izany: mitovy amin'ny endrika samihafa ny paramètre rehetra, toy ny logs IIS, apache ary log nginx. Ho an'ny lozisialy fampiharana, izay, ohatra, ny hadisoana, ny hafatra momba ny fampahalalana, ny fampitandremana dia voarakitra an-tsoratra, ny latabatra mitokana dia homena ny rafitra mety (amin'izao fotoana izao eo amin'ny sehatry ny famolavolana).
Rehefa mamolavola latabatra dia tena zava-dehibe ny manapa-kevitra amin'ny fanalahidy fototra (izay handaminana ny angona mandritra ny fitahirizana). Miankina amin'izany ny haavon'ny fanerena ny angona sy ny hafainganan'ny fangatahana. Ao amin'ny ohatra asehontsika, ny fanalahidy dia
ORDER BY (fld_app_name, fld_app_module, logdatetime)
Izany hoe, amin'ny anaran'ny rafitra, ny anaran'ny singa rafitra ary ny datin'ny hetsika. Tamin'ny voalohany, ny datin'ny hetsika no voalohany. Rehefa avy namindra azy tany amin'ny toerana farany, dia nanomboka niasa indroa haingana kokoa ny fanontaniana. Ny fanovana ny fanalahidy fototra dia mitaky ny famerenana ny latabatra sy ny famerenana indray ny angon-drakitra mba handaminana indray ny angona amin'ny kapila ny ClickHouse. Hetsika mavesa-danja izany, ka tsara ny mieritreritra be momba izay tokony hampidirina ao amin'ny fanalahidin'ny sort.
Tsara homarihina koa fa ny karazana data LowCardinality dia niseho tamin'ny dikan-teny vao haingana. Rehefa mampiasa azy io, dia mihena be ny haben'ny angon-drakitra voaporitra ho an'ireo saha izay manana kardinaly ambany (safidy vitsivitsy).
Ny version 19.6 dia ampiasaina amin'izao fotoana izao ary mikasa ny hanandrana ny fanavaozana ny kinova farany izahay. Izy ireo dia manana endri-javatra mahafinaritra toy ny Adaptive Granularity, Skipping indices ary ny codec DoubleDelta, ohatra.
Amin'ny alàlan'ny default, mandritra ny fametrahana, ny haavon'ny logging dia napetraka ho trace. Ny logs dia mihodina sy mitahiry, fa miaraka amin'izay koa, miitatra hatramin'ny gigabyte. Raha tsy ilaina dia azonao atao ny mametraka ny haavon'ny fampitandremana, dia mihena be ny haben'ny log. Apetraka ao amin'ny rakitra config.xml ny fandrafetana log:
<!-- Possible levels: https://github.com/pocoproject/poco/blob/develop/Foundation/include/Poco/Logger. h#L105 -->
<level>warning</level>
Didy mahasoa sasany
Поскольку оригинальные пакеты установки собираются по 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. Log ny router avy amin'ny FileBeat mankany amin'ny filaharana RabbitMQ
Ity singa ity dia ampiasaina hampandehanana ny log avy amin'ny FileBeat mankany amin'ny filaharana RabbitMQ. Misy teboka roa eto:
- Mampalahelo fa tsy manana plugin output hanoratana mivantana amin'ny RabbitMQ ny FileBeat. Ary ny fiasa toy izany, raha jerena ny olana ao amin'ny github, dia tsy nomanina ho fampiharana. Misy plugin ho an'ny Kafka, saingy noho ny antony tsy ahafahantsika mampiasa azy ao an-trano.
- Misy fepetra takiana amin'ny fanangonana logs ao amin'ny DMZ. Miorina amin'izy ireo dia tsy maintsy ampidirina amin'ny filaharana aloha ny logs ary avy eo ny LogStash dia mamaky ny fidirana avy amin'ny filaharana avy any ivelany.
Noho izany, ho an'ny tranga misy ny mpizara ao amin'ny DMZ dia tsy maintsy mampiasa tetika somary sarotra toy izany ny olona iray. Ohatra config dia toy izao:
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. filaharana hafatra
Ity singa ity dia ampiasaina hanesorana ny fidirana amin'ny log ao amin'ny DMZ. Ny fandraketana dia atao amin'ny alàlan'ny andiana Filebeat → LogStash. Ny famakiana dia atao any ivelan'ny DMZ amin'ny alàlan'ny LogStash. Rehefa miasa amin'ny RabboitMQ dia hafatra 4 arivo isan-tsegondra no voahodina.
Ny fampitaovana hafatra dia amboarina amin'ny anaran'ny rafitra, izany hoe mifototra amin'ny angon-drakitra fikirakirana FileBeat. Mandeha amin'ny filaharana iray ny hafatra rehetra. Raha noho ny antony iray dia mijanona ny serivisy milahatra, dia tsy hitarika amin'ny fahaverezan'ny hafatra izany: Ny FileBeats dia hahazo hadisoana amin'ny fifandraisana ary hampiato vetivety ny fandefasana. Ary ny LogStash izay mamaky avy amin'ny filaharana dia hahazo hadisoana amin'ny tambajotra ary miandry ny famerenana ny fifandraisana. Amin'ity tranga ity, ny angon-drakitra, mazava ho azy, dia tsy hosoratana amin'ny angon-drakitra intsony.
Ireto toromarika manaraka ireto dia ampiasaina amin'ny famoronana sy fanamboarana filaharana:
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. Dashboards
Ity singa ity dia ampiasaina hanehoana ny angona fanaraha-maso. Amin'ity tranga ity, mila mametraka ny loharano angon-drakitra ClickHouse ho an'ny Grafana 4.6+ plugin ianao. Tsy maintsy nanova kely izany izahay mba hanatsarana ny fahombiazan'ny fanodinana ny sivana SQL eo amin'ny dashboard.
Ohatra, mampiasa variables izahay, ary raha tsy napetraka ao amin'ny saha sivana izy ireo, dia tiantsika ny tsy hamorona fepetra ao amin'ny WHERE ny endrika ( uriStem = » AND uriStem != » ). Amin'ity tranga ity, ny ClickHouse dia hamaky ny tsanganana uriStem. Amin'ny ankapobeny, nanandrana safidy isan-karazany izahay ary nanitsy ny plugin (ny macro $valueIfEmpty) tamin'ny farany ka raha misy sanda poakaty dia miverina 1 izy io, tsy lazaina intsony ny tsanganana.
Ary izao dia azonao ampiasaina ity fangatahana ity ho an'ny grafika
$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')
izay adika amin'ity SQL ity (mariho fa niova ho 1 fotsiny ny saha uriStem banga)
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
famaranana
Ny fisehoan'ny tranokala ClickHouse dia lasa hetsika manan-danja eo amin'ny tsena. Sarotra ny nieritreritra fa, maimaim-poana tanteraka, tao anatin'ny indray mipi-maso dia nirongo fitaovana mahery vaika sy azo ampiharina izahay mba hiasa miaraka amin'ny angon-drakitra lehibe. Mazava ho azy, miaraka amin'ny fitomboan'ny filàna (ohatra, sharding sy replication amin'ny server maro), dia ho sarotra kokoa ny drafitra. Saingy amin'ny fahatsapana voalohany, ny miasa miaraka amin'ity tahiry ity dia tena mahafinaritra. Hita fa natao "ho an'ny olona" ny vokatra.
Raha ampitahaina amin'ny ElasticSearch, ny vidin'ny fitehirizana sy fanodinana dia tombanana hidina dimy ka hatramin'ny folo heny. Raha lazaina amin'ny teny hafa, raha ny habetsaky ny angona ankehitriny dia tsy maintsy manangana andiana milina maromaro isika, dia rehefa mampiasa ClickHouse, dia ampy ho antsika ny milina iray manana hery ambany. Eny, mazava ho azy, ny ElasticSearch dia manana rafitra fanerena angon-drakitra ao anaty kapila sy ireo endri-javatra hafa izay mety hampihena be ny fanjifana loharanon-karena, fa raha oharina amin'ny ClickHouse, dia ho lafo kokoa izany.
Raha tsy misy fanatsarana manokana amin'ny anjarantsika, amin'ny fikandrana default, ny fametrahana angon-drakitra ary ny fisafidianana avy amin'ny angon-drakitra dia miasa amin'ny hafainganam-pandeha mahagaga. Mbola tsy manana angon-drakitra betsaka izahay (eo amin'ny 200 tapitrisa eo ho eo), fa ny server mihitsy no malemy. Azontsika ampiasaina amin'ny ho avy io fitaovana io ho an'ny tanjona hafa tsy mifandraika amin'ny fitehirizana logs. Ohatra, ho an'ny fanadihadiana farany, eo amin'ny sehatry ny fiarovana, fianarana milina.
Amin'ny farany, kely momba ny mahatsara sy maharatsy azy.
Минусы
- Mametraka rakitsoratra amin'ny andiany lehibe. Amin'ny lafiny iray, endri-javatra ity, saingy mbola mila mampiasa singa fanampiny ianao amin'ny firaketana an-tsoratra. Ity asa ity dia tsy tsotra foana, fa mbola azo vahana. Ary tiako ny hanatsotra ny tetika.
- Ny fiasa hafahafa na endri-javatra vaovao dia matetika tapaka amin'ny dikan-teny vaovao. Miteraka ahiahy izany, mampihena ny faniriana hanavao ny dikan-teny vaovao. Ohatra, ny motera latabatra Kafka dia endri-javatra tena ilaina izay ahafahanao mamaky mivantana ny hetsika avy amin'ny Kafka, tsy misy fampiharana mpanjifa. Saingy raha jerena ny isan'ny olana ao amin'ny github, dia mbola mitandrina izahay mba tsy hampiasa ity motera ity amin'ny famokarana. Na izany aza, raha tsy manao fihetsika tampoka amin'ny sisiny ianao ary mampiasa ny fiasa fototra, dia miasa tsara izy io.
Плюсы
- Tsy miadana.
- Fehezana fidirana ambany.
- loharano misokatra.
- maimaim-poana.
- Mizana tsara (sharding/replication ivelan'ny boaty)
- Tafiditra ao amin'ny rejisitry ny rindrambaiko Rosiana natolotry ny Minisiteran'ny Serasera.
- Ny fisian'ny fanohanana ofisialy avy amin'ny Yandex.
Source: www.habr.com