構造が説明するのは簡単です:nginxの+ Logstash + Redisのシングル+ Logstash + Elasticsearchクラスタ+ grafana + kibana(そこには使用はありませんが、grafanaショー付き)
A. nginxのログ形式
LOG_FORMATメイン'$ REMOTE_ADDR [$ time_local] "$依頼"'
'$のrequest_body $ステータスの$ body_bytes_sent "$ HTTP_REFERER" "$ HTTP_USER_AGENT"'
'$ REQUEST_TIME $ upstream_response_time';
ログの表示:
172.16.16.132 [21/7月/ 2019:09:56:12 -0400] "GET /favicon.ico HTTP / 1.1" - 404 555 "http://172.16.16.74/" の「Mozilla / 5.0(Windows NTの10.0。 Win64の、ヤモリなどのx64)のAppleWebKit / 537.36(KHTML)クローム/ 75.0.3770.142サファリ/ 537.36" 0.000 -
II。elstaticsearchクラスタのセットアップ
rootとしてインストールするだけでなく、いくつかのパラメータを調整することがないように注意してください、あなたは、特定のエラーログ、Baiduのを見ることができます。
あなただけが「172.16.16.80:9300","172.16.16.80:9301は」第三マシンのポートが9201であることに注意してください、私は2 elasticsearchを開くために、マシンをだから、次のパラメータを変更する必要があるので、
三点のelastaicsearch注意がnode.nameを変更します。
cluster.name:私のアプリケーション
node.name:ノード-1
network.host:0.0.0.0
たhttp.port:9200
discovery.seed_hosts:[ "172.16.16.74:9300"、 "172.16.16.80:9300","172.16.16.80:9301"]
cluster.initial_master_nodes:[ "ノード1"]
そうでない場合、ノードは、データファイルを削除してから再起動し、そのを調査するために、特定のエラーに基づいています。rootユーザーによって実行される、または特定のパラメータを変更するために、一般的に報告されます
クラスタを検出する方法:
Googleは、ブラウザのプラグインelasticsearch頭を持っています
元々マスタは今、このような撮影テストクラスタ続いて、ノード1です。
III。Redisのを維持するために収集されたログをlogstash
1. logstash_in.confを構築するためにlogstash confディレクトリに解凍します
入力{
ファイル{
タイプ=> "nginxの"
パス=>「/usr/local/nginx/logs/host.access.log"######nginx的ログ文件
START_POSITION => "最初"
}
}
output {
stdout { codec => rubydebug }#############打印显示
if [type] == "nginx" {
redis {
host => "172.16.16.74"
data_type => "list"
key => "logstash-service_name"
}
}
}
2.nohup ./logstash -f ../conf/logstash_in.conf
3.tail -f nohup.out 检查有没有报错
四。logstash抓取redis日志到elasticsearch
1.这里用的gork正则来解析nginx的日志,并且解决url带中文的问题,这个正则有点麻烦
这个网站可以帮忙调正则 http://grokdebug.herokuapp.com/
input {
redis {
host => "172.16.16.74"
type => "nginx"
data_type => "list"
key => "logstash-service_name"
}
}
filter {
grok { match => { "message" => "%{IPORHOST:clientip} \[%{HTTPDATE:time}\] \"%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}\" \- %{NUMBER:http_status_code} %{NUMBER:bytes} \"(?<http_referer>\S+)\" \"(?<http_user_agent>(\S+\s+)*\S+)\".* %{BASE16FLOAT:request_time}"
}}
urldecode {
all_fields => true
}
date {
match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => ["172.16.16.74:9200","172.16.16.80:9200","172.16.16.80:9201"]
index => "logstash--%{+YYYY.MM.dd}"}
}
可以查看 nohup.out文件,发现gork解析了
五。grafana展示
1.首先配置数据源
这里报这个错误是因为要选择对应的elastaticsearch版本 这里选择2点多的版本所以报错了,No date field named @timestamp found