前言
Elasticsearch + Logstash + Kibana(ELK)是一套开源的日志管理方案,含括了日志的收集、分析和展示,常用于网站的访问日志、数据库日志或后台服务的日志收集和分析。
- ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。支持通过HTTP使用JSON进行数据索引。
- logstash是一个应用程序日志、事件的传输、处理、管理和搜索的平台。你可以用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计。
- Kibana是一个为 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口。可使用它对日志进行高效的搜索、可视化、分析等各种操作。
服务端部署
安装JAVA
yum install java-1.8.0-openjdk
export JAVA_HOME=/usr/java
安装Redis
- 下载安装
wget http://download.redis.io/releases/redis-3.2.0.tar.gz tar xzf redis-3.2.0.tar.gz cd redis-3.2.0 make make install cp redis.conf /etc/
- 启动redis
nohup redis-server /etc/redis.conf &
安装Elasticsearch
- 下载安装
wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.1.noarch.rpm yum localinstall elasticsearch-1.7.1.noarch.rpm
- 启动服务
service elasticsearch start
- 测试访问
curl -X GET http://localhost:9200/
安装Kibana
- 下载安装
wget https://download.elastic.co/kibana/kibana/kibana-4.5.1-linux-x64.tar.gz tar xzf kibana-4.5.1-linux-x64.tar.gz
- 启动服务,在安装目录里运行:
bin/kibana
- 注:默认配置下,Kibana会访问localhost的Elasticsearch,如果要连接其他Elasticsearch实列,请修改Kibana.yml里的Elasticsearch地址。
安装 Logstash
- 下载安装
wget https://download.elastic.co/logstash/logstash/logstash-1.5.1.tar.gz tar zxvf logstash-1.5.1.tar.gz
- 新建配置文件
vi /etc/logstash-index.conf
input { redis { host => "127.0.0.1" port => "6379" data_type => "list" key => "logstash" codec => json } } output { elasticsearch { host => "127.0.0.1" index => "logstash-%{+YYYY.MM.dd}-%{type}" } <span">}
- 启动服务
nohup bin/logstash -w 8 -f /etc/logstash-index.conf > /soft/logstash-1.5.1/log_index.txt 2>&1 &
客户端配置
- 安装java、Logstash
- 使用nginx日志收集做参考,新建配置
vi /etc/logstash-agent-nginx.conf
input { file { type => "nginx-access" path => "/usr/local/nginx/logs/access.log" } } filter { grok { type => "nginx-access" pattern => "%{IPORHOST:source_ip} - %{USERNAME:remote_user} \ [%{HTTPDATE:timestamp}\] %{QS:request} %{INT:status} %{INT:body_bytes_sent} %{QS:http_referer} %{QS:http_user_agent} %{NUMBER:request_time:float}" } date { type => "nginx-access" locale => en match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ] } geoip { type => "nginx-access" source => "source_ip" } } output { redis{ host =>"127.0.0.1" data_type => "list" key => "logstash" } }
- 修改nginx配置
vi /usr/local/nginx/conf/nginx.conf
log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" $request_time';
使用
- 在浏览器中访问Kibana的地址,如http://localhost:5601
- 配置Elasticsearch索引的index pattern,你可以选择默认的logstash-* 作为index pattern,也可以使用本文当中日志指定的类型 logstash-*-{type},这样的话就可以区分不同类型的日志了。
- 选择一个包含时间戳的字段
- 点击 Create 添加index pattern,此时便可以在页面的Discover标签页看到日志数据
Discover标签页
Discover的功能是用于查看日志数据,在这里你可以很方便地根据索引、时间和具体的过滤项找到你想到的数据,还可以看到每条记录的详细信息和字段的数据统计情况。同时,你可以保存当前的搜索条件,可以用作可视化或是下次查看时直接打开。
(点击图片查看大图)
Visualize标签页
Visualize的功能是把数据可视化,在这里Kibana提供了多种的可视化类型供选择,可以根据不同的数据源、不同的需求选择不同的可视化类型,它的数据来源可以是以下几种:
- 一个已保存的搜索
- 一个已保存的可视化实列
- 一个新的搜索
(点击图片查看大图)
DashBoard标签页
DashBoard是把多个可视化组件整合在一起的页面,这样你就可以很直观地看到不同数据间的关联。
(点击图片查看大图)
ELK在运维系统中的应用
- 日志收集和管理
- 故障排查
- 异常监控,如服务器监控、应用监控和错误报警等
- 数据分析,如性能分析、用户行为分析等