一、概述
日志有什么用?
日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。-
何为ELK?
ELK 由ElasticSearch 、 Logstash 和 Kibana 三个开源工具组成,是一个开源实时日志分析平台。- Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制, restful 风格接口,多数据源,自动搜索负载等。
- Logstash 是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)。
- kibana 也是一个开源和免费的工具,他 Kibana 可以为 Logstash 和ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

图解1

图解2
二、系统环境
- System: Centos release 7.0 (Final)
- ElasticSearch: 5.4.0
- Logstash: 5.4.0
- Kibana: 5.4.0
- Java: openjdk version ”1.8.0_102″
- ELK下载: https://www.elastic.co/downloads/
三、安装篇
ElasticSearch安装
后续操作以elk目录为主
# 下载解压
cd /opt
mkdir elk
cd elk
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.0.tar.gz
tar -xzf elasticsearch-5.4.0.tar.gz
cd elasticsearch-5.4.0
# 配置cofng/elasticsearch.yml
http.hosts 不设置默认localhost
# 启动, -d后台运行
./bin/elasticsearch -d
# 查看是否安装成功
curl -XGET '192.168.100.242:9200/?pretty'
## 删除指定索引
curl -XDELETE '192.168.100.242:9200/hl4pl_prod-*?pretty'
ElasticSearch Head 插件安装 (待完善)
Logstash 安装
# 切换到elk目录
# 下载解压
https://artifacts.elastic.co/downloads/logstash/logstash-5.4.0.tar.gz
tar -xzf logstash-5.4.0.tar.gz
cd logstash-5.4.0
# 新建shipper.conf配置文件,添加内容如下:
input { stdin { } }
output {
elasticsearch { hosts => ["localhost:9200"] }
stdout { codec => rubydebug }
}
# 启动
bin/logstash -f shipper.conf
# nohup 启动
nohup bin/logstash -f shipper.conf &
Kibana 安装
# 下载解压并安装
kibana-5.4.0-linux-x86_64.tar.gz
cd kibana-5.4.0-linux-x86_64
# 修改config/kibana.yml
设置elasticsearch.url为http://localhost:9200
# 配置ip地址和端口
四、配置篇
Logstash
shipper.conf 以正则表达式进行匹配
input {
file {
type => "log4j"
path => [
"/home/hoolinks/hl4pl/service/service.log",
"/home/hoolinks/hl4pl/csp_web/logs/catalina.out",
"/home/hoolinks/hl4pl/cp_web/logs/catalina.out"]
codec => multiline { ## 通过配置识别日志开头,来保证多行可以被合并
pattern => "^[\d{2}:\d{2}:\d{2}.\d+)]" ## 正则匹配以什么作为日志开头标志
negate => true
what => "previous"
}
start_position => "beginning"
}
}
filter {
if [type] == "log4j" {
grok {
match => {
"message" => [
"(?<time>\d{2}:\d{2}:\d{2}.\d+)\s(?<thread>\[[^]]*\]{1})\s(?<level>\w+)\s(?<class>\[[^]]*\]{1})\s?(?<content>[\s|\S]*)",
"(?<time>\d{2}:\d{2}:\d{2}.\d+)\s(?<level>\w+)\s(?<class>\[[^]]*\]{1})\s?(?<content>[\s|\S]*)"
]
}
remove_field => ["message"]
}
date {
match => ["time", "HH:mm:ss Z"]
}
}
}
output {
stdout { ## 输出到控制端
codec => rubydebug
}
elasticsearch { ## 输出到es
hosts => ["localhost:9200"] ## es地址和端口
flush_size => 5000
index => "dev-%{+YYYY.MM.dd}" ## kibana的检索index,不同环境需要调整
idle_flush_time => 10
}
}
