简介
工作工程中,不论是开发还是运维,都会遇到各种各样的日志,主要包括系统日志、应用程序日志和安全日志,对于开发人员来说,查看日志,可以实时查看程序的运行错误,以及性能分析,通常,一个大中型的应用程序会被部署到多台服务器,那日志文件也会分散到不同的机器上,这样查看日志难道要一台一台去查看?显然是太麻烦了,开源的日志分析系统 ELK 完美的解决了这个问题。
ELK 并不是一个独立的系统,她是由 ElasticSearch、Logstash、Kibana 三个开源的工具组成。
- ElasticSearch
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。 - Logstash
Logstash 是一个开源的日志分析、收集工具,并将日志存储以供以后使用。 - Kibana
Kibana 是一个为 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口。可使用它对日志进行高效的搜索、可视化、分析等各种操作。
搭建方法
基于一台主机的搭建,没有使用多台集群,logstah 收集日志后直接写入 elasticseach,可以用 redis 来作为日志队列
jdk 安装
jdk 1.8 安装
elasticseach 安装
下载地址:https://www.elastic.co/downloads,选择相应的版本 我这里的版本是 elasticsearch-2.4.0
解压目录: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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56[phachon@localhost elk]$ tar -zxf elasticsearch-2.4.0
[phachon@localhost elasticsearch-2.4.0]$
# 安装 head 插件
[phachon@localhost elasticsearch-2.4.0]$./bin/plugin install mobz/elasticsearch-head
[phachon@localhost elasticsearch-2.4.0]$ ls plugins/
head
编辑 elasticseach 的配置文件
[phachon@localhost elasticsearch-2.4.0]$ vim config/elasticseach.yml
13 # ---------------------------------- Cluster -----------------------------------
14 #
15 # Use a descriptive name for your cluster:
16 #
17 cluster.name: es_cluster #这里是你的el集群的名称
18 #
19 # ------------------------------------ Node ------------------------------------
20 #
21 # Use a descriptive name for the node:
22 #
23 node.name: node0 # elseach 集群中的节点
24 #
25 # Add custom attributes to the node:
26 #
27 # node.rack: r1
28 #
29 # ----------------------------------- Paths ------------------------------------
30 #
31 # Path to directory where to store the data (separate multiple locations by comma):
32 #
33 path.data: /tmp/elasticseach/data #设置 data 目录
34 #
35 # Path to log files:
36 #
37 path.logs: /tmp/elasticseach/logs # 设置 logs 目录
#
39 # ----------------------------------- Memory -----------------------------------
40 #
41 # Lock the memory on startup:
42 #
43 # bootstrap.memory_lock: true
44 #
45 # Make sure that the `ES_HEAP_SIZE` environment variable is set to about half the memory
46 # available on the system and that the owner of the process is allowed to use this limit.
47 #
48 # Elasticsearch performs poorly when the system is swapping the memory.
49 #
50 # ---------------------------------- Network -----------------------------------
51 #
52 # Set the bind address to a specific IP (IPv4 or IPv6):
53 #
54 # network.host: 192.168.0.1
55 network.host: 192.168.30.128 # 这里配置本机的 ip 地址,这个是我的虚拟机的 ip
56 #
57 # Set a custom port for HTTP:
58 #
59 http.port: 9200 # 默认的端口
其他配置可先不设置
启动 elstaicseach
1 | [root@localhost elasticsearch-2.4.0]$ ./bin/elasticsearch |
注意,这里肯定会报错:
1 | [root@localhost elasticsearch-2.4.0]# ./bin/elasticsearch |
之前在网上搜的教程这里都没有详细说明,导致花了很长时间卡在这里安装不成功。
提示的原因已经说的很清楚了,不能以 root 权限来安装 elasticseach
为 elsearch 添加专门的用户组和用户
1 | [root@localhost elasticsearch-2.4.0]# groupadd elsearch |
将 elasticseach 的安装目录设置为 elsearch 用户组和用户所有
1 | [root@localhost elk]# chown -R elsearch:elsearch elasticsearch-2.4.0/ |
别忘了将 /tmp/elasticseach/data 和 /tmp/elasticseach/logs 目录也设置为 elsearch 用户所有,要不然会没有权限读写
1 | [root@localhost tmp]# chown -R elsearch:elsearch elasticseach/ |
好了。终于设置完毕。切换到 elsearch 重新启动
1 | [elsearch@localhost elasticsearch-2.4.0]# ./bin/elasticsearch |
启动成功
在本机浏览器访问 http://192.168.30.128:9200
说明搜索引擎 API 返回正常。注意要在服务器将 9200 端口打开,否则访问失败。
打开我们刚刚安装的 head 插件
http://192.168.30.128:9200/_plugin/head/
如果是第一次搭建好,里面是没有数据的,node0 节点也没有集群信息,这里我搭建完成后已经添加了数据。所以显示的有信息
Logstash安装
下载地址:https://www.elastic.co/downloads,选择相应的版本 我这里的版本是 logstash-2.4.0.tar.gz
解压目录:
1 | [root@localhost elk]# tar -zxvf logstash-2.4.0 |
编辑 logstash 配置文件:
1 | [root@localhost logstash-2.4.0]# mkdir config |
这里因为为了简单来显示一下数据,我这里将 apache 的日志作为数据源,也就是 logstash 的 input,直接输出到 elstaticseach 里,即 ouput
1 | input { |
使用命令来检测配置文件是否正确
1 | [root@localhost logstash-2.4.0]# ./bin/logstash -f config/logstash.conf --configtest |
启动 logstash 来收集日志
1 | [root@localhost logstash-2.4.0]# ./bin/logstash -f config/logstash.conf |
好了,logstash 可以开始收集日志了,当日志文件有变化时,会动态的写入到 elastaticseach 中,先让我们来产生一些日志吧。
刷新 http://192.168.30.128/ 一直刷新,apache 产生访问日志。ok,打开我们的 elasticseach 的 web 页面 http://192.168.30.128:9200/_plugin/head/
这里就出现了我们刚刚配置的 apachelog 的日志,点开数据浏览
这里很详细的列出了我们的日志文件,还有字段,左边可进行相应的搜索,右边点击可查看具体的日志信息。
至此我们已经能够收集日志,并进行搜索,接下来我们来将搜索数据可视化成图表
Kibana 的安装
下载:https://www.elastic.co/downloads 对应自己的版本, 这里我的版本是:kibana-4.6.1-linux-x86
解压目录:
1 | [root@localhost elk]# tar -zxvf kibana-4.6.1-linux-x86 |
编辑配置文件:
1 | [root@localhost kibana-4.6.1-linux-x86]# vim config/kibana.yml |
配置比较简单
配置完成后开始运行
1 | [root@localhost kibana-4.6.1-linux-x86]# ./bin/kibana |
在浏览器运行 http://192.168.30.128:5601
这里要先添加 index,在 输入框输入我们刚刚收集的 apachelog 作为 index 名称
点击 create 创建
右上角选择时间来显示我们的数据访问,下面是数据的访问量
中间的搜索框可输入搜索条件搜索,搜索完成后点击右上角的 save seach 保存搜索数据
点击 visualize 可以画出其他的数据分析图,比如饼状图
选择我们刚刚保存的 chrome 的文件来生成饼状图
因为数据没什么变化,所以只能全部是一样的。还是点击右上角的保存按钮,将饼状图保存为 test
添加到 面板中,点击 dashboard
点击 + 号添加
选择 test 来显示到面板,效果如下
这样简单的 ELK 系统就搭建起来了,当然,正真的使用环境中,我们会使用集群搭建。利用 redis 来处理日志队列。
marvel 插件
Marvel是Elasticsearch的管理和监控工具,在开发环境下免费使用。拥有更好的数据图表界面。
首先在 elastaticsearch 下安装 marvel-agent 插件
1 | [elsearch@localhost elasticsearch-2.4.0]$ ./bin/plugin install license |
这里注意,必须先执行 license 安装,再执行 marvel-agent 安装,安装完成后重启 elastaticseach
接下来 kibana 来安装 marvel 插件
1 | [root@localhost kibana-4.6.1-linux-x86]# cd bin |
安装完成后重启 kibana,选择 marvel 插件
是不是感觉有点高大上。。。
好了 ELK 的基本搭建就算是完成了,接下来我们考虑如何集群来使用这个系统。
欢迎指正, Thanks….