前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ELK6.4.3+redis5.0.6部署

ELK6.4.3+redis5.0.6部署

作者头像
刘銮奕
发布2019-11-18 20:10:47
9700
发布2019-11-18 20:10:47
举报
文章被收录于专栏:奕知伴解

一、ELK简介

ELK是Elasticsearch+Logstash+Kibana的简称。

Elasticsearch 索引指相互关联的文档集合。Elasticsearch 会以 JSON 文档的形式存储数据。每个文档都会在一组键(字段或属性的名称)和它们对应的值(字符串、数字、布尔值、日期、数值组、地理位置或其他类型的数据)之间建立联系。

Logstash 是一个开源的服务器端数据处理管道,允许您在将数据索引到 Elasticsearch 之前同时从多个来源采集数据,并对数据进行充实和转换。

Kibana 是一款适用于 Elasticsearch 的数据可视化和管理工具,可以提供实时的直方图、线形图、饼状图和地图。

二、ELK工作流程

在需要收集日志的所有服务上部署logstash,作为logstash agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到Redis,然后logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示。

三、ELK部署架构

我选择在L-E之间添加一层redis辅助,这样能够减少日志在服务端的积压,把压力转移到ELK系统服务器上。这种方式添加redis之后,由于redis是内存系统所以响应速度很快,而且可以在redis后添加多个消费系统(Logstash),来扩展消费能力,增强处理速度。

1、准备工作

1.1、主机环境

主机名

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

2、部署准备条件:

2.1、服务器&软件环境说明

安装jdk1.8(node1、node2、node3)

建议:先提前下载jdk软件(rpm或tar.gz格式都可以),再通过scp上传到CentOS系统中,这样会节省很多时间。

代码语言:javascript
复制
 [root@localhost ELKB]# mkdir /usr/java
 [root@localhost ELKB]# tar zxvf  jdk-8u181-linux-x64.tar.gz -C /usr/java

设置环境变量

代码语言:javascript
复制
[root@localhost ELKB]# vim /etc/profile

在文件最后新增以下内容:

代码语言:javascript
复制
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
代码语言:javascript
复制
[root@localhost ELKB]# source /etc/profile

验证 java 1.8.0.181 是否已安装成功

代码语言:javascript
复制
[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)

四、ELK环境准备

1、修改文件限制(node1、node2、node3)

代码语言:javascript
复制
[root@localhost ELKB]# vi /etc/security/limits.conf

增加以下内容

代码语言:javascript
复制
* soft nofile 65536
* hard nofile 65536
* soft nproc 2048
* hard nproc 4096

2、调整swap虚拟内存&最大并发连接(node1、node2、node3)

代码语言:javascript
复制
[root@localhost ELKB]# vi /etc/sysctl.conf

增加的内容

代码语言:javascript
复制
vm.max_map_count=655360
fs.file-max=655360

3、重启系统生效(node1、node2、node3)

代码语言:javascript
复制
[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、更改目录所有者

代码语言:javascript
复制
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节点上

五、部署elasticsearch(node1、node2)

1、安装elasticsearch

代码语言:javascript
复制
[root@liu-elk1 ~]# rpm -ivh elasticsearch-6.4.1.rpm

2、elasticsearch节点配置(node1、node2)

先对原文件进行备份:

代码语言:javascript
复制
[root@liu-elk1 elasticsearch]#  cp  /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml_bak

进入elasticsearch配置目录

代码语言:javascript
复制
[root@liu-elk1 elasticsearch]cd /etc/elasticsearch/

清空并编辑配置文件:

代码语言:javascript
复制
[root@liu-elk1 elasticsearch]# echo "" > elasticsearch.yml & vim /etc/elasticsearch/elasticsearch.yml

node1主节点:

代码语言:javascript
复制
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从节点:

代码语言:javascript
复制
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不熟悉的伙伴可以先把防火墙关闭了

代码语言:javascript
复制
[root@liu-elk1 elasticsearch]# systemctl stop firewall

确认防火墙是否关闭

代码语言:javascript
复制
[root@liu-elk1 elasticsearch]# systemctl status firewall

若感觉关闭防火墙太绝对了,可以开放9200,9300端口:

代码语言:javascript
复制
firewall-cmd --add-port=9200/tcp --permanent
firewall-cmd --add-port=9300/tcp --permanent

重新加载防火墙规则

代码语言:javascript
复制
firewall-cmd --reload

6、启动服务

代码语言:javascript
复制
[root@liu-elk1 elasticsearch]# systemctl start elasticsearch

7、检查服务

代码语言:javascript
复制
[root@liu-elk1 elasticsearch]# systemctl status elasticsearch

[root@liu-elk1 elasticsearch]# netstat -nltp | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      12132/java

也可以通过curl查看健康状态

代码语言:javascript
复制
curl http://192.168.0.49:9200/_cluster/health

如果返回status=green表示正常

状态正常可以通过浏览器访问

开启自动启动

代码语言:javascript
复制
[root@liu-elk1 elasticsearch]# systemctl enable elasticsearch

8、安装图形化界面(可选配置)

代码语言:javascript
复制
[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 代表去除目录结构化

检查服务

代码语言:javascript
复制
[root@liu-elk1 ~]# node --version
v0.10.30

10、图形化插件加载

代码语言:javascript
复制
[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端口:

代码语言:javascript
复制
firewall-cmd --add-port=9100/tcp --permanent

重新加载防火墙规则

代码语言:javascript
复制
firewall-cmd --reload

12、浏览器通过访问 http://192.168.0.49:9100

六、部署redis 5(node3)

1、安装依赖

代码语言:javascript
复制
[root@liu-elk3 ~]# yum install gcc gcc-c++ -y

2、解压到指定文件夹中 如果速度很慢,建议离线下载,再通过scp上传。

代码语言:javascript
复制
[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、编译

代码语言:javascript
复制
[root@liu-elk3 ~]# cd /usr/redis/redis-5.0.6
[root@liu-elk3 ~]# make

4、Redis启动与测试

4.1、启动redis-server 进入src目录

代码语言:javascript
复制
cd /usr/redis/redis-5.0.6/src

4.2、启动服务端

代码语言:javascript
复制
./redis-server/

4.3、启动redis客户端测试 进入src目录

代码语言:javascript
复制
cd /usr/redis/redis-5.0.6/src

启动客户端测试

代码语言:javascript
复制
./redis-cli
设置:set key1 liu
获取:get key1
liu

5、Redis配置 5.1、修改配置:绑定本机IP&关闭保护模式 修改配置文件

代码语言:javascript
复制
 vi /usr/redis/redis-5.0.6/redis.conf

更换绑定 将bind 127.0.0.1 更换为本机IP,例如:192.168.0.51

代码语言:javascript
复制
bind 192.168.0.51

关闭保护模式

代码语言:javascript
复制
protected-mode no

5.2、若防火墙未关闭需要6379开放端口 增加redis端口:6379

代码语言:javascript
复制
firewall-cmd --add-port=6379/tcp --permanent

重新加载防火墙设置

代码语言:javascript
复制
firewall-cmd --reload

6、Redis指定配置文件启动

指定配置文件启动

代码语言:javascript
复制
cd /usr/redis/redis-5.0.6
./src/redis-server redis.conf

连接指定Redis Server

代码语言:javascript
复制
cd /usr/redis/redis-5.0.6
./src/redis-cli -h 192.168.0.51

7、配置Redis开机启动 将Redis配置成为系统服务,以支持开机启动

7.1、创建Redis服务文件

代码语言:javascript
复制
vi /usr/lib/systemd/system/redis.service

文件内容

代码语言:javascript
复制
[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服务开机启动&开启服务

代码语言:javascript
复制
systemctl enable redis
systemctl start redis

七、部署logstash(node3)

1、准备工作:useradd elasticsearch

2、数据&日志目录

代码语言:javascript
复制
创建Logstash主目录
mkdir -p /elk/logstash
创建Logstash数据目录
mkdir -p /elk/logstash/data
创建Logstash日志目录
mkdir -p /elk/logstash/logs

更改文件所有者

代码语言:javascript
复制
chown -R elasticsearch:elasticsearch /elk/logstash

3、下载logstash的 rpm 包(node3) 下载地址:https://www.elastic.co/cn/downloads/ ,通过scp上传到node3节点上

4、安装logstash

代码语言:javascript
复制
[root@liu-elk3 ~]# rpm -ivh logstash-6.4.3.rpm

5、编辑logstash的配置文件:

先对原文件进行备份:

代码语言:javascript
复制
[root@liu-elk3 ~]#  cp  /etc/logstash/logstash.yml /etc/logstash/logstash.yml_bak

进入logstash配置目录

代码语言:javascript
复制
[root@liu-elk3 ~]cd /etc/logstash/

清空并编辑配置文件:

代码语言:javascript
复制
[root@liu-elk3 logstash]# echo "" > logstash.yml & vim /etc/logstash/logstash.yml

path.data: /elk/logstash/data
path.logs: /elk/logstash/logs

6、设置 logstash服务开机启动&开启服务

代码语言:javascript
复制
[root@liu-elk3 ~]# systemctl start logstash
[root@liu-elk3 ~]# systemctl enable logstash

检查 logstash服务状态

代码语言:javascript
复制
[root@liu-elk3 ~]# systemctl status logstash

7、结果测试:

启动一个logstash,-e:在命令行执行;input输入,stdin标准输入,是一个插件;output输出,stdout:标准输出

使用rubydebug显示详细输出,codec为一种编解码器

7.1、脚本测试:

代码语言:javascript
复制
[root@liu-elk3 logstash]# /usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout { codec => rubydebug} }'

输入test

输出到elasticsearch上面

代码语言:javascript
复制
[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

代码语言:javascript
复制
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服务

代码语言:javascript
复制
[root@liu-elk3 ~]# systemctl restart logstash

检查logstash服务

代码语言:javascript
复制
[root@liu-elk3 ~]# systemctl status logstash

八、kibana 部署

1、安装前准备 下载Kibana的 rpm 包(node3) 下载地址:https://www.elastic.co/cn/downloads/ ,通过scp上传到node3节点上

2、安装Kibana

代码语言:javascript
复制
[root@liu-elk3 ~]# rpm -ivh kibana-6.4.3-x86_64.rpm

3、编辑kibana的配置文件:先对原文件进行备份:

代码语言:javascript
复制
[root@liu-elk3 ~]#  cp  /etc/kibana/kibana.yml /etc/kibana/kibana.yml_bak

进入Kibana配置目录

代码语言:javascript
复制
[root@liu-elk3 ~]cd /etc/kibana/

清空并编辑配置文件:

代码语言:javascript
复制
[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

代码语言:javascript
复制
sudo firewall-cmd --add-port=5601/tcp --permanent

重新加载防火墙设置

代码语言:javascript
复制
firewall-cmd --reload

5、设置 kibana服务开机启动&开启服务

代码语言:javascript
复制
[root@liu-elk3 ~]# systemctl start kibana
[root@liu-elk3 ~]# systemctl enable kibana

检查 kibana服务状态

代码语言:javascript
复制
[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客户端,执行以下命令

代码语言:javascript
复制
lpush logstash '{"host":"192.168.0.51","type":"logtest","message":"hello"}'

2、Kibana使用 浏览器访问:192.168.1.21:5601 直接点击create即可

3、执行input-output.conf文件

代码语言:javascript
复制
[root@liu-elk3 logstash]# /usr/share/logstash/bin/logstash -f input-output.conf

浏览器访问:192.168.1.21:5601/app/kibana#/discover 即可查看日志

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奕知伴解 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、ELK简介
    • 二、ELK工作流程
      • 三、ELK部署架构
        • 1、准备工作
        • 2、部署准备条件:
        • 四、ELK环境准备
        • 五、部署elasticsearch(node1、node2)
        • 六、部署redis 5(node3)
        • 七、部署logstash(node3)
        • 八、kibana 部署
        • 九、日志测试
    相关产品与服务
    云数据库 Redis
    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档