ELK日志套件安装与使用

1、ELK介绍

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

目前我们的日志方案:

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

当前日志方案问题分析:

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

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

2、ELK安装

默认需要先安装jdk1.8,自行安装即可

2.1、安装ES

2.1.1 下载ES

下载地址: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即可

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

network.host: 192.168.86.108

http.port: 9200

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

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 下载安装

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 。具体的配置格式参见官方文档。

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:

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可以快速搭建日志收集、日志搜索和统计分析平台,可以不写一行代码完成漂亮的统计报表,简直是开发和运维的福音,是不是心动了?如果是,快行动起来吧!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏晨星先生的自留地

域控制器(1)之什么是域控

1755
来自专栏马铖的专栏

npm5 新版功能特性解析及与 yarn 评测对比

前言 前段时间 npm 发布了 5.0 版本,提供了自动记录依赖树,下载使用强校验,重写缓存系统等功能升级和改造,吸引了不少关注。本文将对 npm5 的新功能和...

1.4K7
来自专栏FreeBuf

旧饭新炒之Intel AMT提权漏洞(CVE-2017-5689)后续利用

之前的一篇Intel产品AMT本地及远程提权漏洞(CVE-2017-5689)复现,只是简单的复现了该漏洞,在文章最后提及到了如果进一步对该漏洞进行利用。但是有...

1926
来自专栏IMWeb前端团队

From svn to git 你要知道的东西

最近团队项目准备从svn往git迁,于是做了一些相关的了解,发现svn跟git还是有很多不一样的,下面写了一些个人理解。 核心区别 分布式 vs 集中式 git...

1795
来自专栏北京马哥教育

linux安全小贴士

对于系统管理员,让产品的系统更安全,免于骇客和黑客的攻击,一直是一项挑战。这是我们关于“如何让Linux系统更安全” 或者 “加固Linux系统“之类话题的第一...

2628
来自专栏FreeBuf

Kali Linux渗透基础知识整理(四):维持访问

*本文原创作者:sysorem 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限。使用木马程序、后门程序和rootkit来达到这一目的。...

1988
来自专栏别先生

一脸懵逼学习基于CentOs的Hadoop集群安装与配置(三台机器跑集群)

1:Hadoop分布式计算平台是由Apache软件基金会开发的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS)和MapReduce(Google...

2215
来自专栏达摩兵的技术空间

mac总是卡死折腾记

如果你确认你mac是硬件ok,但是在某些程序运行的时候导致内存飙升,比如最明显吃内存的chrome,这时候可能就是你内存分配的一些问题,近期我就根据apple ...

894
来自专栏FreeBuf

Lcx的多种用法:3个功能+9个参数,你会怎么玩?

*原创作者:ForWhat,本文属FreeBuf原创奖励计划,未经许可禁止转载 ? 前言 记得刚开始接触黑客技术的时候是2014年,那时候struts2漏洞利...

2616
来自专栏云计算教程系列

如何在CentOS 6.5上使用Unicorn和Nginx部署Rails应用程序

在部署基于Rails的Web应用程序时,简单设计的应用程序服务器可以在几分钟内启动并运行。但是,如果您希望更好地控制服务器设置或想要尝试更灵活的新功能,那么使用...

982

扫码关注云+社区