搭建ELK实时日志分析平台
一、ELK简介
ELK是一套完整的日志分析解决方案,由ElasticSearch、Logstash、Kibana这三款开源软件组成。Elasticstash是基于Lucene开发的分布式存储检索引擎,用来存储各类日志;Logstash对日志进行收集、分析,并将其存储供以后使用;Kibana是基于Node.js开发的展示工具,为Logstash和ElasticSearch提供用于日志展示的Web界面,还用于帮助汇总、分析和搜索重要日志数据。
ELK的工作原理如下:
在所有需要收集日志的服务上部署Logstash,作为Logstash agent用于监控并过滤所收集的日志,将过滤后的内容整合在一起,最终全部交给ElasticSearch检索引擎;可以用ElasticSearch进行自定义搜索,在通过kibana结合自定义搜索内容生成图标,进行日志数据展示。
站在用户的角度思考问题,与客户深入沟通,找到花都网站设计与花都网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广、域名注册、网站空间、企业邮箱。业务覆盖花都地区。
二、搭建环境
两台CenostOS 7
IP:192.168.80.100 安装:elasticsearch、logstash、Kibana
IP:192.168.80.110 安装:elasticsearch
三、部署ElasticSearch
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
1、安装ElasticSearch
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch //安装elasticsearch的yum源密钥
vi /etc/yum.repos.d/elasticsearch.repo //配置elasticsearch的yum源
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1
yum install elasticsearch -y //安装
yum install java -y //安装java环境必须是1.8以上
java -version //查看版本
vi /etc/elasticsearch/elasticsearch.yml //修改配置文件
17行 集群名称
cluster.name: abner
23行 节点名称
node.name: linux-node1
33行 修改data和日志存放的路径
path.data: /data/es-data
path.logs: /var/log/elasticsearch/
43行 防止交换swap分区
bootstrap.memory_lock: true
54行 开启监听网络
network.host: 0.0.0.0
58行 开启监听的端口
http.port: 9200
mkdir -p /data/es-data //新建data存放目录
chown -R elasticsearch:elasticsearch /data/es-data //修改目录权限
systemctl start elasticsearch //启动服务
netstat -ntap | grep 9200 //查看端口状态
浏览器访问测试页192.168.80.100:9200
2、实现与ElasticSearch交互
第一种:JAVA APO
第二种:RESTful API(通过json格式 交互)
curl -i -XGET 'http://192.168.80.100:9200/_count?pretty' -d '{
"query": {
"match_all": {}
}
}'
3、安装elasticsearch-head插件/usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head //安装插件,该安装方式是从git的方式拉取的也可以用docker pull
浏览器访问测试插件是否安装成功http://192.168.80.100:9200/_plugin/head/
4、ElasticSearch集群部署(在另外一台虚拟机上安装)
1)安装ElasticSearch(步骤同上)
2)Linux-node1开启集群自动发现机制vi /etc/elasticsearch/elasticsearch.yml //修改配置文件
systemctl restart elasticsearch //重启node1服务
3)Linux-node2开启集群自动发现机制vi /etc/elasticsearch/elasticsearch.yml //修配置文件
systemctl restart elasticsearch //重启node2服务
4)浏览器访问会看到主节点和副节点http://192.168.80.100:9200/_plugin/head/
5、安装监控组件/usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf //安装
浏览器访问监控页面http://192.168.80.100:9200/_plugin/kopf/#!/cluster
四、部署Logstash
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
1、安装Logstash
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch //下载yum源密钥
vim logstash.repo //配置logstash的yum源
[logstash-2.1]
name=Logstash repository for 2.1.x packages
baseurl=http://packages.elastic.co/logstash/2.1/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1
yum install logstash -y //安装
2、Logstash的使用
ln -s /opt/logstash/bin/logstash /usr/bin/ //对logstash命令做软连接
logstash -e 'input { stdin{} } output { stdout{} }' //执行logstash命令定义输入和输出流,类似管道
注释: -e:执行操作
input:标准输入
{ input }:插件
output:标准输出
{ stdout }:插件
logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug } }' //通过rubydebug来输出下更详细的信息
logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["192.168.80.100:9200"] } stdout { codec => rubydebug } }' //输入到elasticsearch中
http://192.168.80.100:9200/_plugin/head/ //访问elastic的web页面查看
3、Logstash配置文件的使用vi 01-logstash.conf //编辑配置文件收集系统日志
input {
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["192.168.175.132:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
logstash -f 01-logstash.conf //指定配置文件进行过滤匹配
vi 02-logstash.conf //编辑配置文件同时收集系统日志和安全日志
input {
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
file {
path => "/var/log/secure"
type => "secure"
start_position => "beginning"
}
}
output {
if [type] == "system" {
elasticsearch {
hosts => ["192.168.1.202:9200"]
index => "nagios-system-%{+YYYY.MM.dd}"
}
}
if [type] == "secure" {
elasticsearch {
hosts => ["192.168.1.202:9200"]
index => "nagios-secure-%{+YYYY.MM.dd}"
}
}
}logstash -f 02-logstash.conf //指定配置文件进行过滤匹配
五、部署Kibana
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。
1、下载安装Kibana
wget https://download.elastic.co/kibana/kibana/kibana-4.3.1-linux-x64.tar.gz //下载kibana程序包
tar zxvf kibana-4.3.1-linux-x64.tar.gz //解压
mv kibana-4.3.1-linux-x64/ /usr/local/kibana //将程序包移动并且改名
vi /usr/local/kibana/config/kibana.yml //修改配置文件
#服务端口
server.port: 5601
#服务地址
server.host: "0.0.0.0"
#elasticsearch对应的地址和端口
elasticsearch.url: "http://192.168.175.132:9200"
#数据字段类型
kibana.index: ".kibana"
yum install screen -y //安装screen,以便于kibana在后台运行(当然也可以不用安装,用其他方式进行后台启动)
/usr/local/kibana/bin/kibana //启动
netstat -antp |grep 5601 //监听端口
2、浏览器访问192.168.80.100:5601
填写对应的日志索引
点击Discover根据时间选择器来筛选日志
六、ELK实战
输出nginx、apache、message、secrue的日志到前台展示
1、编辑nginx配置文件,修改以下内容(在http模块下添加)
log_format json '{"@timestamp":"$time_iso8601",''"@version":"1",'
br/>'"@version":"1",'
'"url":"$uri",'
'"status":"$status",'
'"domian":"$host",'
'"host":"$server_addr",'
'"size":"$body_bytes_sent",'
'"responsetime":"$request_time",'
'"referer":"$http_referer",'
'"ua":"$http_user_agent"'
'}';
修改access_log的输出格式为刚才定义的json
access_log logs/elk.access.log json;
2、修改apache的配置文件
LogFormat "{ \
\"@timestamp\": \"%{%Y-%m-%dT%H:%M:%S%z}t\", \
\"@version\": \"1\", \
\"tags\":[\"apache\"], \
\"message\": \"%h %l %u %t \\"%r\\" %>s %b\", \
\"clientip\": \"%a\", \
\"duration\": %D, \
\"status\": %>s, \
\"request\": \"%U%q\", \
\"urlpath\": \"%U\", \
\"urlquery\": \"%q\", \
\"bytes\": %B, \
\"method\": \"%m\", \
\"site\": \"%{Host}i\", \
\"referer\": \"%{Referer}i\", \
\"useragent\": \"%{User-agent}i\" \
}" ls_apache_json
一样修改输出格式为上面定义的json格式
CustomLog logs/access_log ls_apache_json;
3、编辑logstash配置文件,进行日志收集vi full.conf //编辑日志收集配置文件
input {
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
file {
path => "/var/log/secure"
type => "secure"
start_position => "beginning"
}
file {
path => "/var/log/httpd/access_log"
type => "http"
start_position => "beginning"
}
file {
path => "/usr/local/nginx/logs/elk.access.log"
type => "nginx"
start_position => "beginning"
}
}
output {
if [type] == "system" {
elasticsearch {
hosts => ["192.168.80.100:9200"]
index => "nagios-system-%{+YYYY.MM.dd}"
}
}
if [type] == "secure" {
elasticsearch {
hosts => ["192.168.80.100:9200"]
index => "nagios-secure-%{+YYYY.MM.dd}"
}
}
if [type] == "http" {
elasticsearch {
hosts => ["192.168.80.100:9200"]
index => "nagios-http-%{+YYYY.MM.dd}"
}
}
if [type] == "nginx" {
elasticsearch {
hosts => ["192.168.80.100:9200"]
index => "nagios-nginx-%{+YYYY.MM.dd}"
}
}
}
logstash -f /etc/logstash/conf.d/full.conf //运行logstash过滤日志并且访问elasticsearch的web页面查看
新闻标题:搭建ELK实时日志分析平台
文章来源:http://scyanting.com/article/jjeopd.html