Logstash
是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的存储库
中。
通过Kibana
,您可以对自己的Elasticsearch
进行可视化,还可以在 Elastic Stack
中进行导航,这样您便可以进行各种操作了,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。
中文官网:https://www.elastic.co/cn
安装包下载
下载地址:
https://www.elastic.co/cn/downloads/logstash
https://www.elastic.co/cn/downloads/kibana
选择适合你的任意方式下载:
本篇采用的版本:
logstash-6.5.0.tar.gz
kibana-6.5.0-linux-x86_64.tar.gz
Logstash 安装
- 解压
[root@localhost app]# tar -xzvf AppStore/logstash-6.5.0.tar.gz
- Logstash 目录
[root@localhost app]# cd logstash-6.5.0/
[root@localhost logstash-6.5.0]# ll
总用量 844
drwxr-xr-x. 2 root root 4096 8月 20 20:51 bin
drwxr-xr-x. 2 root root 142 8月 20 20:51 config
-rw-r--r--. 1 root root 2276 11月 10 2018 CONTRIBUTORS
drwxr-xr-x. 2 root root 6 11月 10 2018 data
-rw-r--r--. 1 root root 4056 11月 10 2018 Gemfile
-rw-r--r--. 1 root root 21851 11月 10 2018 Gemfile.lock
drwxr-xr-x. 6 root root 84 8月 20 20:51 lib
-rw-r--r--. 1 root root 13675 11月 10 2018 LICENSE.txt
drwxr-xr-x. 4 root root 90 8月 20 20:51 logstash-core
drwxr-xr-x. 3 root root 57 8月 20 20:51 logstash-core-plugin-api
drwxr-xr-x. 4 root root 55 8月 20 20:51 modules
-rw-r--r--. 1 root root 808305 11月 10 2018 NOTICE.TXT
drwxr-xr-x. 3 root root 30 8月 20 20:51 tools
drwxr-xr-x. 4 root root 33 8月 20 20:51 vendor
drwxr-xr-x. 10 root root 205 8月 20 20:51 x-pack
- 编辑配置文件
拷贝一份logstash
的样例配置文件,该文件用于配置数据采集源、输出及过滤规则:
[root@localhost app]# cd logstash-6.5.0/config/
[root@localhost config]# ll
总用量 32
-rw-r--r--. 1 root root 1846 11月 10 2018 jvm.options
-rw-r--r--. 1 root root 4568 11月 10 2018 log4j2.properties
-rw-r--r--. 1 root root 342 11月 10 2018 logstash-sample.conf
-rw-r--r--. 1 root root 8162 11月 10 2018 logstash.yml
-rw-r--r--. 1 root root 3244 11月 10 2018 pipelines.yml
-rw-r--r--. 1 root root 1696 11月 10 2018 startup.options
[root@localhost config]# cp logstash-sample.conf logstash-nginx-access-log.conf
[root@localhost config]# vim logstash-nginx-access-log.conf
编辑采集源和输出(过滤器配置参考官方文档):
# input 模块的内容表示 logstash 收集的是文件数据
# path 指向了数据来源
# type 可自定义
# start_position 值表示文件数据的采集位置,“beginning”表示从文件的第一行开始收集数据
input {
file {
path => ["/usr/local/nginx/logs/access.log"]
type => "galaxy"
start_position => "beginning"
}
}
# output 模块配置了数据的输出端,本例输出端是 es 数据库
# hosts 指定了 es 服务器地址
# index 指定了数据文件的索引规则
output {
elasticsearch {
hosts => ["http://192.168.18.170:9200"]
index => "logstash-nginx-access-log-%{+YYYY.MM.dd}"
}
}
- 启动 Logstash
确保es
已启动,netstat -nlp | grep 9200
命令检查es
服务是否正常
bin/logstash -f config/logstash-nginx-access-log.conf
启动Nginx
服务,访问nginx
页面(Nginx 安装部署可参考 Linux 下安装部署 Nginx(一)
,Linux 下安装部署 Nginx(二)),logstash
输出如下日志信息:
Sending Logstash logs to /app/logstash-6.5.0/logs which is now configured via log4j2.properties
[2019-08-20T21:51:43,172][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.queue", :path=>"/app/logstash-6.5.0/data/queue"}
[2019-08-20T21:51:43,622][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/app/logstash-6.5.0/data/dead_letter_queue"}
[2019-08-20T21:51:47,045][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2019-08-20T21:51:48,134][INFO ][logstash.runner ] Starting Logstash {"logstash.version"=>"6.5.0"}
[2019-08-20T21:51:48,298][INFO ][logstash.agent ] No persistent UUID file found. Generating new UUID {:uuid=>"c73c448c-7de4-4858-ab35-2365ea4aff9b", :path=>"/app/logstash-6.5.0/data/uuid"}
[2019-08-20T21:52:00,597][INFO ][logstash.pipeline ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
[2019-08-20T21:52:02,928][INFO ][logstash.outputs.elasticsearch] Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://192.168.18.170:9200/]}}
[2019-08-20T21:52:02,959][INFO ][logstash.outputs.elasticsearch] Running health check to see if an Elasticsearch connection is working {:healthcheck_url=>http://192.168.18.170:9200/, :path=>"/"}
[2019-08-20T21:52:05,734][WARN ][logstash.outputs.elasticsearch] Restored connection to ES instance {:url=>"http://192.168.18.170:9200/"}
[2019-08-20T21:52:06,498][INFO ][logstash.outputs.elasticsearch] ES Output version determined {:es_version=>6}
[2019-08-20T21:52:06,505][WARN ][logstash.outputs.elasticsearch] Detected a 6.x and above cluster: the `type` event field won't be used to determine the document _type {:es_version=>6}
[2019-08-20T21:52:06,590][INFO ][logstash.outputs.elasticsearch] New Elasticsearch output {:class=>"LogStash::Outputs::ElasticSearch", :hosts=>["http://192.168.18.170:9200"]}
[2019-08-20T21:52:06,795][INFO ][logstash.outputs.elasticsearch] Using mapping template from {:path=>nil}
[2019-08-20T21:52:06,860][INFO ][logstash.outputs.elasticsearch] Attempting to install template {:manage_template=>{"template"=>"logstash-*", "version"=>60001, "settings"=>{"index.refresh_interval"=>"5s"}, "mappings"=>{"_default_"=>{"dynamic_templates"=>[{"message_field"=>{"path_match"=>"message", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false}}}, {"string_fields"=>{"match"=>"*", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false, "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}}}], "properties"=>{"@timestamp"=>{"type"=>"date"}, "@version"=>{"type"=>"keyword"}, "geoip"=>{"dynamic"=>true, "properties"=>{"ip"=>{"type"=>"ip"}, "location"=>{"type"=>"geo_point"}, "latitude"=>{"type"=>"half_float"}, "longitude"=>{"type"=>"half_float"}}}}}}}}
[2019-08-20T21:52:06,962][INFO ][logstash.outputs.elasticsearch] Installing elasticsearch template to _template/logstash
[2019-08-20T21:52:07,971][INFO ][logstash.inputs.file ] No sincedb_path set, generating one based on the "path" setting {:sincedb_path=>"/app/logstash-6.5.0/data/plugins/inputs/file/.sincedb_d2343edad78a7252d2ea9cba15bbff6d", :path=>["/usr/local/nginx/logs/access.log"]}
[2019-08-20T21:52:08,098][INFO ][logstash.pipeline ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x2d72e666 run>"}
[2019-08-20T21:52:08,288][INFO ][filewatch.observingtail ] START, creating Discoverer, Watch with file and sincedb collections
[2019-08-20T21:52:08,798][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2019-08-20T21:52:13,197][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
上述输出是在提示logstash
建立了一些数据文件,与es
成功建连,并且启动成功。这表示logstash
已经具备了采集数据,并对数据进行转换和传输的能力。
接下来安装kibana
来对收集到的数据进行图形化展示。
Kibana 安装
- 解压
[root@localhost app]# tar -xzvf AppStore/kibana-6.5.0-linux-x86_64.tar.gz
- Kibana 目录
[root@localhost ~]# cd /app/kibana-6.5.0-linux-x86_64/
[root@localhost kibana-6.5.0-linux-x86_64]# ll
总用量 1736
drwxr-xr-x. 2 elk elk 64 11月 10 2018 bin
drwxrwxr-x. 2 elk elk 24 11月 10 2018 config
drwxrwxr-x. 2 elk elk 6 11月 10 2018 data
-rw-rw-r--. 1 elk elk 13675 11月 10 2018 LICENSE.txt
drwxrwxr-x. 6 elk elk 108 11月 10 2018 node
drwxrwxr-x. 1186 elk elk 36864 11月 10 2018 node_modules
-rw-rw-r--. 1 elk elk 1680994 11月 10 2018 NOTICE.txt
drwxrwxr-x. 3 elk elk 45 11月 10 2018 optimize
-rw-rw-r--. 1 elk elk 748 11月 10 2018 package.json
drwxrwxr-x. 2 elk elk 6 11月 10 2018 plugins
-rw-rw-r--. 1 elk elk 5309 11月 10 2018 README.txt
drwxr-xr-x. 16 elk elk 264 11月 10 2018 src
drwxr-xr-x. 2 elk elk 4096 11月 10 2018 webpackShims
- 编辑配置文件
// 打开 server.host 配置,值为 kibana 部署的服务器 IP
server.host: "192.168.18.170"
// 打开 es 指向配置,指向 es 服务器地址
elasticsearch.url: "http://192.168.18.170:9200"
保存退出。
- 启动 Kibana
[root@localhost kibana-6.5.0-linux-x86_64]# ./bin/kibana
启动成功后访问:http://192.168.18.170:5601
进入management
菜单,点击Kibana - Index Pattern
按钮,创建索引模式
进入Discover
菜单,查看Nginx
服务器的访问量及日志信息: