ELK日志套件安装与使用

2019年12月12日 阅读数:66
这篇文章主要向大家介绍ELK日志套件安装与使用,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

1ELK介绍javascript

ELK不是一款软件,而是elasticsearch+Logstash+kibana三款开源软件组合而成的日志收集处理套件,堪称神器。其中Logstash负责日志收集,elasticsearch负责日志的搜索、统计,而kibana则是ES的展现神器,前端炫丽,点几下鼠标简单配置,就能够完成搜索、聚合功能,生成华丽的报表。前端

目前咱们的日志方案:java

  • flume负责收集,服务写日志到文件,flume收集日志文件
  • flume汇总到数据通道kafka,供其余服务消费
  • 日志搜索:从kafka读取日志写入到solr cloud提供搜索
  • 日志统计:将kafka的日志写到hdfs,使用spark、hive来作统计
  • 日志展现:开发的java-web,读取数据库生成统计报表

当前日志方案问题分析:node

  • 须要预先编程才能使用,开发工做量大
  • 不够灵活,新需求须要改代码
  • 离线统计,实时性不高
  • 未提供基于搜索结果的统计功能
  • 系统方案较为复杂,须要了解多项技术,学习维护成本高
  • ……
  • 新增需求都是泪,开发出来后变更不多

经过调研ELK,发现真是解救目前问题的一个神器,大部分问题均可以迎刃而解。linux

2ELK安装nginx

   

默认须要先安装jdk1.8,自行安装便可web

2.1、安装ES数据库

2.1.1 下载ESapache

   

下载地址:https://www.elastic.co/downloads/elasticsearch编程

最新版本是2.28发布的5.2.2版本

   

windows选择ZIP,linux选择tar,ubuntu选择DEB

测试服务器是ubuntu,直接下载deb包,而后安装便可

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.2.deb

sudo dpkg -i elasticsearch-5.2.2.deb

2.1.2 配置

若是使用deb包安装的,配置文件路径以下:

类型

描述

默认路经

Setting

home

Elasticsearch home directory or $ES_HOME

/usr/share/elasticsearch

  

bin

Binary scripts including elasticsearch to start a node and elasticsearch-plugin to install plugins

/usr/share/elasticsearch/bin

  

conf

Configuration files including elasticsearch.yml

/etc/elasticsearch

path.conf

conf

Environment variables including heap size, file descriptors.

/etc/default/elasticsearch

  

data

The location of the data files of each index / shard allocated on the node. Can hold multiple locations.

/var/lib/elasticsearch

path.data

logs

Log files location.

/var/log/elasticsearch

path.logs

plugins

Plugin files location. Each plugin will be contained in a subdirectory.

/usr/share/elasticsearch/plugins

  

repo

Shared file system repository locations. Can hold multiple locations. A file system repository can be placed in to any subdirectory of any directory specified here.

Not configured

path.repo

script

Location of script files.

/etc/elasticsearch/scripts

path.scripts

   

修改/etc/elasticsearch/elasticsearch.yml便可

测试使用,主要设置网络:

1
2
3
network.host: 192.168.86.108
 
http.port: 9200

ES的集群配置比较方便,设置cluster.name就能够:

1
cluster.name: es-log

2.1.3 启动ES

   

因为咱们使用的deb安装的,所以能够用服务方式启动:

service elasticsearch start

   

若是使用的压缩包,执行 bin/elasticsearch (or bin\elasticsearch.bat on Windows)便可

   

而后,打开 curl http://192.168.86.108:9200/ 测试(ip换成配置的ip)

   

2.2 安装 Logstash

   

如今收集处理框架很是多,像 facebook 出品的scribe ,apache 基金会的亲儿子flume,Logstash也是一个很是出名的日志框架,使用jruby开发,能够运行在jvm之上实现跨平台,具体的介绍能够到官网http://logstash.net查看。

   

Logstash安装比较简单,下载压缩包、解压、配置,启动便可。

2.2.1 下载安装

1
2
3
4
5
wget https: //artifacts .elastic.co /downloads/logstash/logstash-5 .2.2. tar .gz
 
tar  zxvf logstash-5.2.2. tar .gz
 
ln  -s logstash-5.2.2 logstash

 

2.2.2 配置 

Logstash 和flume比较相似,有input和output的概念。不过logstash社区一般习惯用 shipper,broker 和 indexer 来描述数据流中不一样进程各自的角色。

   

咱们来看怎么配置logstash。

 

建立一个配置文件nginxlog2es.conf,读取nginx日志,输出到elasticsearch 。具体的配置格式参见官方文档。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
input {
     file {
         path =>  "/var/log/nginx/access.log_json"
         codec =>  "json"
     }
}
filter {
     mutate {
         split => [  "upstreamtime" ","  ]
     }
     mutate {
         convert => [  "upstreamtime" "float"  ]
     }
}
output {
   stdout { codec => rubydebug }
   elasticsearch {
         hosts => [ "192.168.86.108:9200" ]
         index =>  "logstash-%{type}-%{+YYYY.MM.dd}"
         document_type =>  "%{type}"
         flush_size => 20000
         idle_flush_time => 10
         sniffing =>  true
         template_overwrite =>  true
     }
}

 

  

这里简单说明下,input是file类型,/var/log/nginx/access.log_json每行是一个json数据,codec => "json"指定按json解析。

output 配置了两个,stdout 是控制台输出,elasticsearch 则是输出到前面配置的es服务器,index 索引名称为logstash-nginx-日期,这样天天为一个索引。

   

Nginx 直接生成json日志能够经过指定logformat,拼接为json:

配置logformat:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
log_format json  '{"@timestamp":"$time_iso8601",'
 
'"host":"$server_addr",'
 
'"clientip":"$remote_addr",'
 
'"size":$body_bytes_sent,'
 
'"responsetime":$request_time,'
 
'"upstreamtime":"$upstream_response_time",'
 
'"upstreamhost":"$upstream_addr",'
 
'"http_host":"$host",'
 
'"url":"$uri",'
 
'"xff":"$http_x_forwarded_for",'
 
'"referer":"$http_referer",'
 
'"agent":"$http_user_agent",'
 
'"status":"$status"}' ;

  

而后使用:

access_log /var/log/nginx/access.log_json json;

这样nginx的日志就变为:

   

2.2.3 启动logstash

使用-f指定配置文件

bin/logstash -f nginxlog2es.conf  

启动成功后就能看到收集到的日志:

   

2.3 kibana

2.3.1 安装

kibana安装也比较简单,下载,解压,配置便可

wget https://artifacts.elastic.co/downloads/kibana/kibana-5.2.2-linux-x86_64.tar.gz

解压后创建软链接

ln -s kibana-5.2.2-linux-x86_64 kibana

cd kibana

修改配置文件

vim config/kibana.yml

修改

server.host: "192.168.86.108"

elasticsearch.url: "http://192.168.86.108:9200"

而后启动:

bin/kibana


2.3.2 配置报表

启动后打开http://192.168.86.108:5601,就能看到日志了,在输入框里还能够输入关键词进行搜索,而且自带流量统计。

   

   

下面来看如何生成报表,好比搞个响应时间折线图,进入visualize,选择折线图

   

分别配置X和y轴,Y为平均响应时间,X为时间,最后保存便可。

   

再来配置一个表格报表,通产各个url的访问量

   

Metrics 配置使用count做为聚合函数

   

buckets增长rows,字段选url

再增长一个状态码:

   

这样就完成了一个漂亮的表格

   

2.3.3 将报表添加到dashboard

   

在dashboard点add,将两个报表加入便可

3、总结

简单的介绍就到这里为止了,更多的功能后面继续挖掘。

总结下,借助ELK能够快速搭建日志收集、日志搜索和统计分析平台,能够不写一行代码完成漂亮的统计报表,简直是开发和运维的福音,是否是心动了?若是是,快行动起来吧!