基于ELK的日志分析系统
2017-04-08魏山林
魏山林
摘要:日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
关键词:日志;系统运维
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)05-0069-02
1 Elk日志分析平台介绍
通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog ,将所有服务器上的日志收集汇总。
集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用 grep 、 awk 和 wc 等Linux 命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
2 开源实时日志分析ELK平台部署流程
1)安装Logstash 依赖包 JDK
Logstash 的运行依赖于Java 运行环境, Logstash 1.5 以上版本不低于 java 7 推荐使用最新版本的Java 。
下载RPM包安装jdk
#rpm -ivh jdk-8u91-linux-x64.rpm
设置 JDK 的环境变量,如下:
# tail -5 /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_91
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
在 Shell 提示符中执行java version 命令,显示如下结果,说明安装成功:
# java -version
java version "1.8.0_91"
2)安装 Logstash
下载并安装Logstash ,下载allplugins的版本,安装logstash 只需将它解压的对应目录即可,例如: /usr/local 下:
# tar zxf logstash-all-plugins-2.3.1.tar.gz -C /usr/local/
#cd /usr/local
#mv logstash-2.3.1 logstash
安裝完成后运行如下命令:
# /usr/local/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'
Settings: Default pipeline workers: 8
Pipeline main started
ysten
2016-05-20T01:53:36.857Z localhost ysten
使用-e参数在命令行中指定配置是很常用的方式,不过如果需要配置更多设置则需要很长的内容。这种情况,我们首先创建一个简单的配置文件,并且指定logstash使用这个配置文件。例如:在logstash 安装目录下创建一个“基本配置”测试文件 logstash-test.conf,文件内容如下:
# cat logstash-simple.conf
input { stdin { } }
output {
stdout { codec=> rubydebug }
}
Logstash 使用 input 和 output 定义收集日志时的输入和输出的相关配置,本例中 input 定义了一个叫"stdin"的 input , output 定义一个叫"stdout"的 output 。无论我们输入什么字符,Logstash 都会按照某种格式来返回我们输入的字符,其中 output 被定义为"stdout"并使用了 codec 参数来指定logstash 输出格式。
使用logstash的-f参数来读取配置文件,执行如下开始进行测试:
# echo "`date` hello World"
Fri May 20 09:58:13 CST 2016 hello World
# /usr/local/logstash/bin/logstash agent -f logstash-simple.conf
Settings: Default pipeline workers: 8
Pipeline main started
Fri May 20 09:58:13 CST 2016 hello World
{
"message" =>"Fri May 20 09:58:13 CST 2016 hello World",
"@version" =>"1",
"@timestamp" =>"2016-05-20T01:58:23.138Z",
"host" =>"localhost"
}
3)安装 Elasticsearch
下载 Elasticsearch 的最新版RPM包并安装。
#rpm -ivh elasticsearch-2.3.2.rpm
修改 Elasticsearch配置
#vim /etc/elasticsearch/elasticsearch.yml
启动elasticsearch服务
# /etc/init.d/elasticsearch start
确认 elasticsearch 的 9200 端口已监听,说明 elasticsearch 已成功运行
# netstat -anp |grep :9200
tcp 0 0 ::ffff:192.168.1.111:9200 :::* LISTEN 12440/java
访问http://192.168.1.111:9200/
Elasticsearch 安装完成。
4)安装 Kibana
下载 kibana 的最新版RPM包并安装。
# rpm -ivhkibana-4.5.0-1.x86_64.rpm
修改 kibana配置
# vim /opt/kibana/config/kibana.yml
启动kibana服务
# /etc/init.d/kibana start
使用 http://192.168.1.111:5601访问 Kibana,全绿就说明安装成功。
5)安装Redis
下载最新版Redis
# tar -zxvf redis-3.2.0.tar.gz -C /usr/local
# cd /usr/local
# mv redis-3.2.0 redis
安装redis
# cd /usr/local/redis
# make
# make install
使用redis自带的脚本配置redis
启动redis
# /usr/local/bin/redis-server
6)集成測试-搜集分析nginx日志
Logstash
创建input output配置文件
#cat sp.conf #采集传输nginx日志到redis
input {
file {
type =>"nginx_access"
path => ["/nginxlogs/tvlivemedia.log"]
}
}
output {
redis {
host =>“localhost"#若不是本地redis则改成redis服务器ip
data_type =>"list"
key =>"logstash:redis"
}
}
#cat index.conf#从redis发送日志到Elasticsearch
input {
redis {
host =>"localhost"
data_type =>"list"
key =>"logstash:redis"
type =>"redis-input"
}
}
output {
elasticsearch {
hosts =>"192.168.1.111"
index =>"access-%{+YYYY.MM.dd}"
}
}
启动采集进程
#/usr/local/logstash/bin/logstash agent -f sp.conf &
Settings: Default pipeline workers: 8
Pipeline main started
Elasticsearch
访问http://192.168.1.111:9200/_search?pretty=true来查看index-pattern
已经可以看到nginx日志进入了Elasticsearch并建立索引access-2016.05.19
Kibana
打开Kibana
http://192.168.1.111:5601/app/kibana#/settings