ELK是Elasticsearch+Logstash+Kibana的简称。
Elasticsearch 索引指相互关联的文档集合。Elasticsearch 会以 JSON 文档的形式存储数据。每个文档都会在一组键(字段或属性的名称)和它们对应的值(字符串、数字、布尔值、日期、数值组、地理位置或其他类型的数据)之间建立联系。
Logstash 是一个开源的服务器端数据处理管道,允许您在将数据索引到 Elasticsearch 之前同时从多个来源采集数据,并对数据进行充实和转换。
Kibana 是一款适用于 Elasticsearch 的数据可视化和管理工具,可以提供实时的直方图、线形图、饼状图和地图。
在需要收集日志的所有服务上部署logstash,作为logstash agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到Redis,然后logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示。
我选择在L-E之间添加一层redis辅助,这样能够减少日志在服务端的积压,把压力转移到ELK系统服务器上。这种方式添加redis之后,由于redis是内存系统所以响应速度很快,而且可以在redis后添加多个消费系统(Logstash),来扩展消费能力,增强处理速度。
主机名 | IP | 操作系统 | 角色 | 版本 |
---|---|---|---|---|
node1 | 192.168.0.49 | CentOS7 | Elasticsearch-主节点 | 6.4.3 |
node2 | 192.168.0.50 | CentOS7 | Elasticsearch-从节点 | 6.4.3 |
node3 | 192.168.0.51 | CentOS7 | Redis+Logstash+Kibana | 5.0.6+6.4.3 |
版本说明:ELK 6.4.3 Redis 5.0 JDK 1.8
安装jdk1.8(node1、node2、node3)
建议:先提前下载jdk软件(rpm或tar.gz格式都可以),再通过scp上传到CentOS系统中,这样会节省很多时间。
[root@localhost ELKB]# mkdir /usr/java
[root@localhost ELKB]# tar zxvf jdk-8u181-linux-x64.tar.gz -C /usr/java
设置环境变量
[root@localhost ELKB]# vim /etc/profile
在文件最后新增以下内容:
export JAVA_HOME=/usr/local/java/jdk1.8.0_181
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
[root@localhost ELKB]# source /etc/profile
验证 java 1.8.0.181 是否已安装成功
[root@localhost ELKB]# java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
1、修改文件限制(node1、node2、node3)
[root@localhost ELKB]# vi /etc/security/limits.conf
增加以下内容
* soft nofile 65536
* hard nofile 65536
* soft nproc 2048
* hard nproc 4096
2、调整swap虚拟内存&最大并发连接(node1、node2、node3)
[root@localhost ELKB]# vi /etc/sysctl.conf
增加的内容
vm.max_map_count=655360
fs.file-max=655360
3、重启系统生效(node1、node2、node3)
[root@localhost ELKB]# reboot
4、创建ELK相关目录并赋权(node1、node2)
创建ELK APP目录
mkdir -p /usr/elk
创建ELK 数据目录
mkdir -p /elk/es/data
创建ELK 日志目录
mkdir -p /elk/es/logs
由于Elasticsearch、Logstash、Kibana均不能以root账号运行,对文件夹所有者进行更改
5、更改目录所有者
chown -R elasticsearch:elasticsearch /usr/elk
chown -R elasticsearch:elasticsearch /elk
6、下载elasticsearch的 rpm 包(node1、node2) 下载地址:https://www.elastic.co/cn/downloads/ ,通过scp上传到node1、node2节点上
1、安装elasticsearch
[root@liu-elk1 ~]# rpm -ivh elasticsearch-6.4.1.rpm
2、elasticsearch节点配置(node1、node2)
先对原文件进行备份:
[root@liu-elk1 elasticsearch]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml_bak
进入elasticsearch配置目录
[root@liu-elk1 elasticsearch]cd /etc/elasticsearch/
清空并编辑配置文件:
[root@liu-elk1 elasticsearch]# echo "" > elasticsearch.yml & vim /etc/elasticsearch/elasticsearch.yml
node1主节点:
cluster.name: LIU_ELK
node.name: node-1
node.master: true
node.data: true
path.data: /elk/es/data
path.logs: /elk/es/logs
network.host: 192.168.0.49
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["192.168.0.49:9300", "h192.168.0.50:9300"]
discovery.zen.minimum_master_nodes: 1
node2从节点:
cluster.name: LIU_ELK
node.name: node-2
node.master: false
node.data: true
path.data: /elk/es/data
path.logs: /elk/es/logs
network.host: 192.168.0.50
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["192.168.0.49:9300", "h192.168.0.50:9300"]
discovery.zen.minimum_master_nodes: 1
3、配置项说明
项 | 说明 |
---|---|
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 | 主节点个数 |
4、防火墙配置:
若对Linux不熟悉的伙伴可以先把防火墙关闭了
[root@liu-elk1 elasticsearch]# systemctl stop firewall
确认防火墙是否关闭
[root@liu-elk1 elasticsearch]# systemctl status firewall
若感觉关闭防火墙太绝对了,可以开放9200,9300端口:
firewall-cmd --add-port=9200/tcp --permanent
firewall-cmd --add-port=9300/tcp --permanent
重新加载防火墙规则
firewall-cmd --reload
6、启动服务
[root@liu-elk1 elasticsearch]# systemctl start elasticsearch
7、检查服务
[root@liu-elk1 elasticsearch]# systemctl status elasticsearch
[root@liu-elk1 elasticsearch]# netstat -nltp | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 12132/java
也可以通过curl查看健康状态
curl http://192.168.0.49:9200/_cluster/health
如果返回status=green表示正常
状态正常可以通过浏览器访问
开启自动启动
[root@liu-elk1 elasticsearch]# systemctl enable elasticsearch
8、安装图形化界面(可选配置)
[root@liu-elk2 elasticsearch]# wget http://nodejs.org/dist/v0.10.30/node-v0.10.30-linux-x64.tar.gz
[root@liu-elk1 ~]# tar --strip-components 1 -xzvf node-v0.10.30-linux-x64.tar.gz -C /usr/local
--strip-components 代表去除目录结构化
检查服务
[root@liu-elk1 ~]# node --version
v0.10.30
10、图形化插件加载
[root@liu-elk1 elasticsearch]# yum install -y git
[root@liu-elk1 ~]# git clone git://github.com/mobz/elasticsearch-head.git
[root@liu-elk1 ~]# cd elasticsearch-head/
[root@liu-elk1 elasticsearch-head]# npm install
[root@liu-elk1 elasticsearch-head]# npm run start
> elasticsearch-head@0.0.0 start /root/elasticsearch-head
> grunt server
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
11、若防火墙未关闭需要放行9100端口:
firewall-cmd --add-port=9100/tcp --permanent
重新加载防火墙规则
firewall-cmd --reload
12、浏览器通过访问 http://192.168.0.49:9100
1、安装依赖
[root@liu-elk3 ~]# yum install gcc gcc-c++ -y
2、解压到指定文件夹中 如果速度很慢,建议离线下载,再通过scp上传。
[root@liu-elk3 ~]# wget http://download.redis.io/releases/redis-5.0.6.tar.gz
[root@liu-elk3 ~]# make -p /usr/redis
[root@liu-elk3 ~]# tar -zxvf redis-5.0.6.tar.gz -C /usr/redis
3、编译
[root@liu-elk3 ~]# cd /usr/redis/redis-5.0.6
[root@liu-elk3 ~]# make
4、Redis启动与测试
4.1、启动redis-server 进入src目录
cd /usr/redis/redis-5.0.6/src
4.2、启动服务端
./redis-server/
4.3、启动redis客户端测试 进入src目录
cd /usr/redis/redis-5.0.6/src
启动客户端测试
./redis-cli
设置:set key1 liu
获取:get key1
liu
5、Redis配置 5.1、修改配置:绑定本机IP&关闭保护模式 修改配置文件
vi /usr/redis/redis-5.0.6/redis.conf
更换绑定 将bind 127.0.0.1 更换为本机IP,例如:192.168.0.51
bind 192.168.0.51
关闭保护模式
protected-mode no
5.2、若防火墙未关闭需要6379开放端口 增加redis端口:6379
firewall-cmd --add-port=6379/tcp --permanent
重新加载防火墙设置
firewall-cmd --reload
6、Redis指定配置文件启动
指定配置文件启动
cd /usr/redis/redis-5.0.6
./src/redis-server redis.conf
连接指定Redis Server
cd /usr/redis/redis-5.0.6
./src/redis-cli -h 192.168.0.51
7、配置Redis开机启动 将Redis配置成为系统服务,以支持开机启动
7.1、创建Redis服务文件
vi /usr/lib/systemd/system/redis.service
文件内容
[Unit]
Description=Redis Server
After=network.target
[Service]
ExecStart=/usr/redis/redis-5.0.6/src/redis-server /usr/redis/redis-5.0.6/redis.conf --daemonize no
ExecStop=/usr/redis/redis-5.0.6/src/redis-cli -p 6379 shutdown
Restart=always
[Install]
WantedBy=multi-user.target
7.2、设置Redis服务开机启动&开启服务
systemctl enable redis
systemctl start redis
1、准备工作:useradd elasticsearch
2、数据&日志目录
创建Logstash主目录
mkdir -p /elk/logstash
创建Logstash数据目录
mkdir -p /elk/logstash/data
创建Logstash日志目录
mkdir -p /elk/logstash/logs
更改文件所有者
chown -R elasticsearch:elasticsearch /elk/logstash
3、下载logstash的 rpm 包(node3) 下载地址:https://www.elastic.co/cn/downloads/ ,通过scp上传到node3节点上
4、安装logstash
[root@liu-elk3 ~]# rpm -ivh logstash-6.4.3.rpm
5、编辑logstash的配置文件:
先对原文件进行备份:
[root@liu-elk3 ~]# cp /etc/logstash/logstash.yml /etc/logstash/logstash.yml_bak
进入logstash配置目录
[root@liu-elk3 ~]cd /etc/logstash/
清空并编辑配置文件:
[root@liu-elk3 logstash]# echo "" > logstash.yml & vim /etc/logstash/logstash.yml
path.data: /elk/logstash/data
path.logs: /elk/logstash/logs
6、设置 logstash服务开机启动&开启服务
[root@liu-elk3 ~]# systemctl start logstash
[root@liu-elk3 ~]# systemctl enable logstash
检查 logstash服务状态
[root@liu-elk3 ~]# systemctl status logstash
7、结果测试:
启动一个logstash,-e:在命令行执行;input输入,stdin标准输入,是一个插件;output输出,stdout:标准输出
使用rubydebug显示详细输出,codec为一种编解码器
7.1、脚本测试:
[root@liu-elk3 logstash]# /usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout { codec => rubydebug} }'
输入test
输出到elasticsearch上面
[root@liu-elk3 ~]# /usr/share/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["192.168.0.49:9200"] } stdout { codec => rubydebug} }'
分别输入test liu
在elasticsearch插件运行下,浏览器查看:
8、配置Redis&Elasticsearch
vi input-output.conf
input {
redis {
data_type => "list"
key => "logstash"
host => "192.168.0.51"
port => 6379
threads => 5
codec => "json"
}
}
filter {
}
output {
elasticsearch {
hosts => ["192.168.0.49:9200","192.168.0.50:9200"]
index => "logstash-%{type}-%{+YYYY.MM.dd}"
document_type => "%{type}"
}
stdout {
}
}
该配置就是从redis中读取数据,然后写入指定的elasticsearch
9、redis核心配置项说明:
配置项 | 说明 |
---|---|
data_type => “list” | 数据类型为list |
key => “logstash” | 缓存key为:logstash |
codec => “json” | 数据格式为:json |
10、重启logstash服务
[root@liu-elk3 ~]# systemctl restart logstash
检查logstash服务
[root@liu-elk3 ~]# systemctl status logstash
1、安装前准备 下载Kibana的 rpm 包(node3) 下载地址:https://www.elastic.co/cn/downloads/ ,通过scp上传到node3节点上
2、安装Kibana
[root@liu-elk3 ~]# rpm -ivh kibana-6.4.3-x86_64.rpm
3、编辑kibana的配置文件:先对原文件进行备份:
[root@liu-elk3 ~]# cp /etc/kibana/kibana.yml /etc/kibana/kibana.yml_bak
进入Kibana配置目录
[root@liu-elk3 ~]cd /etc/kibana/
清空并编辑配置文件:
[root@liu-elk3 kibana]# echo "" > kibana.yml & vim /etc/kibana/kibana.yml
server.port: 5601
server.host: "192.168.0.51"
elasticsearch.url: "http://192.168.0.49:9200"
4、若防火墙未关闭需要5601开放端口 增加kibana端口:5601
sudo firewall-cmd --add-port=5601/tcp --permanent
重新加载防火墙设置
firewall-cmd --reload
5、设置 kibana服务开机启动&开启服务
[root@liu-elk3 ~]# systemctl start kibana
[root@liu-elk3 ~]# systemctl enable kibana
检查 kibana服务状态
[root@liu-elk3 ~]# systemctl status kibana
6、浏览器访问:192.168.0.51:5601
如果警告提示:No default index pattern. You must select or create one to continue. 错误提示:Unable to fetch mapping. do you have indices matching the pattern? 不用担心,这是因为还没有写入日志。
1、日志写入 日历写入的话,写入到logstash监听的redis即可。
redis命令方式启动redis客户端,执行以下命令
lpush logstash '{"host":"192.168.0.51","type":"logtest","message":"hello"}'
2、Kibana使用 浏览器访问:192.168.1.21:5601 直接点击create即可
3、执行input-output.conf文件
[root@liu-elk3 logstash]# /usr/share/logstash/bin/logstash -f input-output.conf
浏览器访问:192.168.1.21:5601/app/kibana#/discover 即可查看日志