一、前言
1、ELK简介
ELK是Elasticsearch+Logstash+Kibana的简称
ElasticSearch是一个基于Lucene的分布式全文搜索引擎,提供 RESTful API进行数据读写
Logstash是一个收集,处理和转发事件和日志消息的工具
- Kibana是Elasticsearch的开源数据可视化插件,为查看存储在ElasticSearch提供了友好的Web界面,并提供了条形图,线条和散点图,饼图和地图等分析工具
总的来说,ElasticSearch负责存储数据,Logstash负责收集日志,并将日志格式化后写入ElasticSearch,Kibana提供可视化访问ElasticSearch数据的功能。
2、ELK工作流
应用将日志按照约定的Key写入Redis,Logstash从Redis中读取日志信息写入ElasticSearch集群。Kibana读取ElasticSearch中的日志,并在Web页面中以表格/图表的形式展示。
二、准备工作
1、服务器&软件环境说明
- 服务器
准备一台CentOS7 Server,资源有限
服务器名 | IP | 说明 |
---|---|---|
es1 | 192.168.223.136 | 部署ElasticSearch主节点 |
elk | 192.168.223.136 | 部署Logstash + Kibana + Redis |
这里为了节省,只部署了1台Elasticsearch,并将Elasticsearch + Logstash + Kibana + Redis部署在了一台机器上。如果在生产环境部署,可以按照自己的需求调整。
- 软件环境
项 | 说明 |
---|---|
Linux Server | CentOS 7 |
Elasticsearch | 6.4.3 |
Logstash | 6.4.3 |
Kibana | 6.4.3 |
Redis | 4.0.14 |
JDK | 1.8 |
2、ELK环境准备
由于Elasticsearch、Logstash、Kibana均不能以root账号运行。但是Linux对非root账号可并发操作的文件、线程都有限制。所以,部署ELK相关的机器都要调整:
- 修改文件限制
# 修改系统文件
vim /etc/security/limits.conf
# 增加的内容
* soft nofile 65536
* hard nofile 65536
* soft nproc 2048
* hard nproc 4096
- 调整进程数
# 修改系统文件
vim /etc/security/limits.d/20-nproc.conf
# 调整成以下配置
* soft nproc 4096
root soft nproc unlimited
- 调整虚拟内存&最大并发连接
# 修改系统文件
vim /etc/sysctl.conf
# 增加的内容
vm.max_map_count=655360
fs.file-max=655360
以上操作重启系统后生效
reboot
- JDK8安装
- 将JDK解压缩到opt目录下
- 配置环境变量,vim /etc/profile
JAVA_HOME=/opt/jdk1.8.0_152
PATH=/opt/jdk1.8.0_152/bin:$PATH
export JAVA_HOME PATH
完成后执行如下操作
source /etc/profile
- 创建ELK专用用户
useradd elk
- 创建ELK相关目录并赋权
# 创建ELK APP目录
mkdir /usr/elk
#创建ELK 数据目录
mkdir /elk
# 更改目录Owner
chown -R elk:elk /usr/elk
chown -R elk:elk /elk
- 下载ELK包并解压
# 打开文件夹
cd /usr/elk
# 下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.4.3.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.4.3-linux-x86_64.tar.gz
# 解压
tar -zvxf elasticsearch-6.4.3.tar.gz
tar -zvxf logstash-6.4.3.tar.gz
tar -zvxf kibana-6.4.3-linux-x86_64.tar.gz
三、Elasticsearch 部署
1、准备工作
- 关闭防火墙,赋予权限
# 关闭防火墙
systemctl stop firewalld
# 开机禁用
systemctl disable firewalld
# 查看状态
systemctl status firewalld
# 赋权
chown -R elk:elk /usr/elk/elasticsearch-6.4.3/
- 这里如果需要开启防火墙的用户,可以配置防火墙开放端口
- 切换账号
# 账号切换到 elk
su - elk
- 数据&日志目录
# 创建Elasticsearch主目录
mkdir /elk/es
# 创建Elasticsearch数据目录
mkdir /elk/es/data
# 创建Elasticsearch日志目录
mkdir /elk/es/logs
2、Elasticsearch节点配置
- 修改配置
# 打开目录
cd /usr/elk/elasticsearch-6.4.3/config
# 修改配置
vim elasticsearch.yml
- 主节点配置(192.168.1.31)
cluster.name: es
node.name: es1
path.data: /elk/es/data
path.logs: /elk/es/logs
network.host: 192.168.223.136
http.port: 9200
transport.tcp.port: 9300
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.223.136:9300"]
discovery.zen.minimum_master_nodes: 1
- 配置项说明
项 | 说明 |
---|---|
cluster.name |
集群名 |
node.name |
节点名 |
path.data | 数据保存目录 |
path.logs | 日志保存目录 |
network.host | 节点host/ip |
http.port | HTTP访问端口 |
transport.tcp.port | TCP传输端口 |
node.master | 是否允许作为主节点 |
node.data | 是否保存数据 |
discovery.zen.ping.unicast.hosts | 集群中的主节点的初始列表,当节点(主节点或者数据节点)启动时使用这个列表进行探测 |
discovery.zen.minimum_master_nodes | 主节点个数 |
3、Elasticsearch启动&健康检查
- 启动
# 进入elasticsearch根目录
cd /usr/elk/elasticsearch-6.4.3/bin
# 启动
./elasticsearch
- 查看健康状态
curl http://192.168.223.136:9200/_cluster/health
如果返回status=green表示正常
{
"name" : "es1",
"cluster_name" : "es",
"cluster_uuid" : "M1JgizpxRKW673CPgLTGcQ",
"version" : {
"number" : "6.4.3",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "fe40335",
"build_date" : "2018-10-30T23:17:19.084789Z",
"build_snapshot" : false,
"lucene_version" : "7.4.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
四、Logstash 部署
1、准备工作
- 部署Redis
1.下载获得redis-4.0.14.tar.gz后将它放入我们的Linux目录/opt
2.解压命令:tar -zxvf redis-4.0.14.tar.gz
3.解压完成后进入目录:cd redis-4.0.14.tar.gz
4.在redis-4.0.14.tar.gz目录下执行make命令,运行Make命令时出现错误,提示 gcc:命令未找到 ,原因是因为当前Linux环境中并没有安装gcc 与 g++ 的环境
5.安装gcc与g++
yum install gcc
yum install gcc-c++
6.重新进入到Redis的目录中执行 make distclean后再执行make 命令,执行完make后,可跳过Redis test步骤,直接执行 make install或自定义安装目录make install PREFIX=/usr/local/redis
7.修改配置文件,将/opt目录下的redis文件夹的配置文件拷贝到/usr/local/redis/bin目录下
vim /usr/local/redis/bin/redis.conf
# 更换绑定
bind 192.168.11.11
# 关闭保护模式
protected-mode no
# 修改启动方式,no表示前台启动,yes表示后台启动
daemonize yes
8.启动
cd /usr/local/redis/bin
./redis-server redis.conf
./redis-cli -h 192.168.223.136
- 赋予权限
# 赋权
chown -R elk:elk /usr/elk/logstash-6.4.3/
- 切换账号
# 账号切换到 elk
su - elk
- 数据&日志目录
# 创建Logstash主目录
mkdir /elk/logstash
# 创建Logstash数据目录
mkdir /elk/logstash/data
# 创建Logstash日志目录
mkdir /elk/logstash/logs
2、Logstash配置
- 配置数据&日志目录
# 打开目录
cd /usr/elk/logstash-6.4.3/config
# 修改配置
vim logstash.yml
# 增加以下内容
path.data: /elk/logstash/data
path.logs: /elk/logstash/logs
- 配置Redis&Elasticsearch
vim config/input-output.conf
#配置内容
input {
redis {
data_type => "list"
key => "logstash"
host => "192.168.223.136"
port => 6379
threads => 5
codec => "json"
}
}
filter {
}
output {
elasticsearch {
hosts => ["192.168.223.136:9200"]
index => "logstash-%{type}-%{+YYYY.MM.dd}"
document_type => "%{type}"
}
stdout {
}
}
该配置就是从redis中读取数据,然后写入指定的elasticsearch
Redis核心配置项说明:
配置项 | 说明 |
---|---|
data_type => “list” | 数据类型为list |
key => “logstash” | 缓存key为:logstash |
codec => “json” | 数据格式为:json |
- 启动
# 进入Logstash根目录
cd /usr/elk/logstash-6.4.3/bin
# 启动
./logstash -f ../config/input-output.conf
启动成功后,在启动输出的最后两行会看到如下信息:
[2019-09-21T16:38:34,904][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2019-09-21T16:38:37,943][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
五、Kibana 部署
1、准备工作
- 赋予权限
# 赋权
chown -R elk:elk /usr/elk/kibana-6.4.3-linux-x86_64
- 切换账号
# 账号切换到 elk
su - elk
3、Kibana配置与访问测试
- 修改配置
# 进入kibana-6.4.3-linux-x86_64根目录
cd /usr/elk/kibana-6.4.3-linux-x86_64
# 修改配置
vim config/kibana.yml
# 增加以下内容
server.port: 5601
server.host: "192.168.223.136"
elasticsearch.url: "http://192.168.223.136:9200"
- 启动
# 进入kibana-6.0.0根目录
cd /usr/elk/kibana-6.4.3-linux-x86_64/bin
# 启动,也可以用nohup启动
./kibana
- 访问
浏览器访问: 192.168.223.136:5601
六、测试
1、日志写入
日历写入的话,写入到logstash监听的redis即可。
数据类型之前在/usr/elk/logstash-6.0.0/config/input-uput.conf中有配置
- redis命令方式
# 启动redis客户端
# 执行以下命令
lpush logstash '{"host":"127.0.0.1","type":"logtest","message":"HelloWorld"}'
- Java代码批量写入(引入Jedis)
Jedis jedis = new Jedis("192.168.223.136", 6379);
jedis.lpush("logstash", "{\"host\":\"127.0.0.1\",\"type\":\"logtest\",\"message\":\"HelloWorld\"}");
2、Kibana使用
浏览器访问:192.168.223.136:5601,此时会提示: Configure an index pattern
Index pattern填写logstash-*,点击下一步
Time Filter field name选择@timestamp,然后点击创建即可
至此ELK日志平台搭建完成