共计 7765 个字符,预计需要花费 20 分钟才能阅读完成。
系统环境
为了安装时不出错,建议选择这两者选择一样的版本,本文全部选择 5.3 版本。
- System: CentOS release 7.3
- Java: openjdk version “1.8.0_131”
- ElasticSearch: 5.3.1
Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。
- Logstash: 5.3.1
Logstash 是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。
- Kibana: 5.3.1
Kibana 也是一个开源和免费的工具,它 Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
ELK 关系:
LEK:logstatsh 收集日志,存到 elasticserach(存储,产生索引,搜索)到 kibana 展现(view)
在官网首页下载 tar 源码包
将以上的源码包上传至 centos 服务器上 /usr/local/src 目录下
tips: Logstash 的运行依赖于 Java 运行环境,Logstash 1.5 以上版本不低于 java 7 推荐使用最新版本的 Java。由于我们只是运行 Java 程序,而不是开发,下载 JRE 即可。首先,在 Oracle 官方下载新版 jre,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html
一、准备
1. 下载 jdk-8u131-linux-x64.tar,上传至 CentOS 上。
2. 解压源码包
通过终端新建 java 文件夹,并解压至 /usr/local/java 文件夹下
# mkdir -pv /usr/local/java
# tar -zxvf /usr/local/src/jdk-8u131-linux-x64.tar.gz -C /usr/local/java
3. 设置 jdk 环境变量
这里采用全局设置方法,就是修改 etc/profile,它是是所有用户的共用的环境变量
# vi /etc/profile
在末尾添加如下图所示:
JAVA_HOME=/usr/local/java/jdk1.7.0_79
JRE_HOME=/usr/local/java/jdk1.7.0_79/jre
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export JAVA_HOME JRE_HOME PATH CLASSPATH
请记住,在上述添加过程中,等号两侧不要加入空格,不然会出现“不是有效的标识符”,因为 source /etc/profile 时不能识别多余到空格,会理解为是路径一部分。
然后保存使 profile 生效
source /etc/profile
4. 检验是否安装成功
java -version
成功则显示如下
java version “1.7.0_79”
二、Elasticsearch 安装配置
1. 解压 elasticsearch-5.3.1.tar 源码包
下载链接:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.1.tar.gz
解压至 /usr/local/ 目录下
tar -zxvf /usr/local/src/elasticsearch-5.3.1.tar.gz -C /usr/local/
2. 修改配置文件
修改 /usr/local/elasticsearch-5.3.1/config/elasticsearch.yml
配置文件。
以下供参考配置,实际以需求为准:
vi /usr/local/elasticsearch-5.3.1/config/elasticsearch.yml
# 这里指定的是集群名称,需要修改为对应的,开启了自发现功能后,ES 会按照此集群名称进行集群发现
cluster.name: skynet_es_cluster
node.name: skynet_es_cluster_dev1
# 数据目录
path.data: /data/elk/data
# log 目录
path.logs: /data/elk/logs
# 修改一下 ES 的监听地址,这样别的机器也可以访问
network.host: 0.0.0.0
# 默认的端口号
http.port: 9200
discovery.zen.ping.unicast.hosts: ["172.18.5.111", "172.18.5.112"]
# discovery.zen.minimum_master_nodes: 3
# enable cors,保证_site 类的插件可以访问 es
http.cors.enabled: true
http.cors.allow-origin: "*"
# Centos6 不支持 SecComp,而 ES5.2.0 默认 bootstrap.system_call_filter 为 true 进行检测,所以导致检测失败,失败后直接导致 ES 不能启动。
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
注意,设置参数的时候: 后面要有空格!
tips:ElasticSearch 配置文件译文解析
3. 修改系统参数
确保系统有足够资源启动 ES
设置内核参数
vi /etc/sysctl.conf
# 增加以下参数
vm.max_map_count=655360
执行以下命令,确保生效配置生效:
sysctl -p
设置资源参数
vi /etc/security/limits.conf
# 修改
* soft nofile 65536
* hard nofile 131072
* soft nproc 65536
* hard nproc 131072
设置用户资源参数
vi /etc/security/limits.d/20-nproc.conf
# 设置 elk 用户参数
elk soft nproc 65536
4. 添加启动用户,设置权限
启动 ElasticSearch5 版本要非 root 用户,需要新建一个用户来启动 ElasticSearch
useradd elk # 创建用户 elk
groupadd elk # 创建组 elk
useradd elk -g elk # 将用户添加到组
mkdir -pv /data/elk/{data,logs} # 创建数据和日志目录
# 修改文件所有者
chown -R elk:elk /data/elk/
chown -R elk:elk /usr/local/elasticsearch-5.3.1/
5. 启动 ES
查看内存剩余
free -g
使用 elk 用户启动 elasticsearch 服务
切换至 elk 用户
su elk
/usr/local/elasticsearch-5.3.1/bin/elasticsearch
检查 elasticsearch 服务,如下图所示,即成功开启服务了,这就意味着你现在已经启动并运行一个 Elasticsearch 节点了。
tips:
单个节点可以作为一个运行中的 Elasticsearch 的实例。而一个集群是一组拥有相同 cluster.name 的节点,(单独的节点也可以组成一个集群)可以在 elasticsearch.yml 配置文件中修改 cluster.name, 该节点启动时加载(需要重启服务后才会生效)。
客户端网页访问:
服务器要关闭防火墙
systemctl stop firewalld.service
网页访问如下所示:即成功了
6. 插件
参考链接:
ElasticSearch 5.0 的 head 插件安装
三、安装 Logstash
下载并安装 Logstash,安装 logstash 只需将它解压的对应目录即可,例如:/usr/local 下:
官网下载地址:https://artifacts.elastic.co/downloads/logstash/logstash-5.3.1.tar.gz
1. 解压源码包
tar /usr/local/src/logstash-5.3.1.tar.gz -C /usr/local/
首先,我们通过运行最基本的 Logstash 管道来测试您的 Logstash 安装。
Logstash 管道有两个必需的元素,input 并且 output,以及一个可选的元素,filter。输入插件消耗来自源的数据,过滤器插件会按照您指定的方���修改数据,并且输出插件将数据写入到目的地。
2. 安装完成后运行如下命令:
/usr/local/logstash-5.3.1/bin/logstash -e 'input {stdin {} } output {stdout {} }'
Sending Logstash's logs to /usr/local/logstash-5.3.1/logs which is now configured via log4j2.properties
[2017-04-25T06:07:10,900][INFO ][logstash.pipeline ] Starting pipeline {"id"=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>125}
The stdin plugin is now waiting for input:
[2017-04-25T06:07:10,968][INFO ][logstash.pipeline ] Pipeline main started
[2017-04-25T06:07:11,064][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
hello world
2017-04-25T10:07:41.447Z yyp hello world
我们可以看到,我们输入什么内容 logstash 按照某种格式输出,其中 - e 参数参数允许 Logstash 直接通过命令行接受设置。这点尤其快速的帮助我们反复的测试配置是否正确而不用写配置文件。使用 ctrl- c 命令可以退出之前运行的 Logstash。
使用 - e 参数在命令行中指定配置是很常用的方式,不过如果需要配置更多设置则需要很长的内容。这种情况,我们首先创建一个简单的配置文件,并且指定 logstash 使用这个配置文件。例如:在 logstash 安装目录下 (/usr/local/logstash-5.3.1/config) 创建一个“基本配置”测试文件 logstash-simple.conf,文件内容如下:
3. 创建配置文件
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 参数来读取配置文件,执行如下开始进行测试:
4. 启动
/usr/local/logstash-5.3.1/bin/logstash -f /usr/local/logstash-5.3.1/config/logstash-simple.conf
Sending Logstash's logs to /usr/local/logstash-5.3.1/logs which is now configured via log4j2.properties
[2017-04-25T06:18:43,294][INFO ][logstash.pipeline ] Starting pipeline {"id"=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>125}
[2017-04-25T06:18:43,939][INFO ][logstash.pipeline ] Pipeline main started
The stdin plugin is now waiting for input:
[2017-04-25T06:18:44,674][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
hello world!
{
"@timestamp" => 2017-04-25T12:21:21.526Z,
"@version" => "1",
"host" => "yyp",
"message" => "hello world!"
}
如上显示,说明成功了。
4. 测试 Elasticsearch 和 Logstash 来收集日志数据
接下来我们在 logstash 安装目录下创建一个用于测试 logstash 使用 elasticsearch 作为 logstash 的后端的测试文件 logstash-test.conf,该文件中定义了 stdout 和 elasticsearch 作为 output,这样的“多重输出”即保证输出结果显示到屏幕上,同时也输出到 elastisearch 中。
前提要保证 elasticsearch 和 logstash 都正常启动(需要先启动 elasticsearch,再启动 logstash)
cat logstash-test.conf
input {stdin {}}
output {elasticsearch {hosts => "192.168.30.132:9200" } #elasticsearch 服务地址
stdout {codec=> rubydebug}
}
开启服务,执行如下命令:
/usr/local/logstash-5.3.1/bin/logstash -f /usr/local/logstash-5.3.1/config/logstash-test.conf
我们可以使用 curl 命令发送请求来查看 ES 是否接收到了数据:
curl 'http://192.168.30.132:9200/_search?pretty'
返回结果:
{"took" : 13,
"timed_out" : false,
"_shards" : {"total" : 1,
"successful" : 1,
"failed" : 0
},
"hits" : {"total" : 1,
"max_score" : 1.0,
"hits" : [
{"_index" : ".kibana",
"_type" : "config",
"_id" : "5.3.1",
"_score" : 1.0,
"_source" : {"buildNum" : 14844
}
}
]
}
}
至此,你已经成功利用 Elasticsearch 和 Logstash 来收集日志数据了。
四、kibana 的安装
1. 解压 kibana-5.3.1-linux-x86_64 源码包
下载地址:https://artifacts.elastic.co/downloads/kibana/kibana-5.3.1-linux-x86_64.tar.gz
解压至/usr/local/ 下
tar -zxvf /usr/local/src/kibana-5.3.1-linux-x86_64.tar.gz -C /usr/local/
2. 配置 kibana
编辑 kibana.yml 配置文件
vi /usr/local/kibana-5.3.1-linux-x86_64/config/kibana.yml
修改以下参数:server.port: 5601 # 开启默认端口 5601
server.host:“192.168.30.132”# 站点地址
elasticsearch.url: http://192.168.30.132:9200 # 指向 elasticsearch 服务的 ip 地址
kibana.index:“.kibana”
3. 启动
执行以下命令启动:/usr/local/kibana-5.3.1-linux-x86_64/bin/kibana
4. 测试浏览器访问
访问:http://192.168.30.132:5601
如下图所示,说明成功访问了
5. 配置 ES 索引
kibana 第一次使用时,会要求创建 index,只要按照默认值即可。
注意:
首次会提示没有索引。。。。
首先需要加上我们刚刚建立的索引 index => “logstash–%{+YYYY-MM}” 点击 setting->indices, 在这里我们可以 Configure an index pattern, 也就是说可以配置 正则匹配的 index,
cat logstash-simple.conf
input {stdin{}
}
output {elasticsearch {action => "index" # 在 ES 上操作 index
hosts => "192.168.30.132:9200" # ES 地址
index => "logstash-%{+YYYY-MM}" # 索引名
}
}
可以看到默认的 index 是 ”logstash-*”, 默认是从 logstash 导出的数据, 因为我们在 logstash 中配置的索引就是 logstash 开头的,所以这里我们保持默认不变.
下面还有一个 Time-field name, 一般来说 time 都是一个必要的字段, 并且这个字段的类型是 date 类型! 不是 string!!! 如果没有时间字段, 那么将上面的 ” Index contains time-based events” 取消就 OK.
问题
1、出现 Configure an index pattern create 是灰色的的问题
这个问题是配置文件的问题,修改 logstash 的配置文件,使其输出到 elasticsearch,其中的 index 选项配置为 kibana 上的 index,比如我是 index => “logstash-%{+YYYY-MM}”,这个时候重启 logstash,kibana 就保持默认的 logstash-* 索引既可,应该能够看到 Create 按钮了
参考资料:第一次接触 elk 日志系统,搭建过程中遇到种种问题,借鉴网上分享的知识,终于成功搭建 elk 日志系统,好记性不如烂笔头!
- Elasticsearch 官方文档参考
- Logstash 官方文档参考
- Kibana User Guide 官方文档参考
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-09/147090.htm