前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ELK6.0部署:Elasticsearch+Logstash+Kibana搭建分布式日志平台

ELK6.0部署:Elasticsearch+Logstash+Kibana搭建分布式日志平台

作者头像
KenTalk
发布2018-09-11 11:41:43
1.2K0
发布2018-09-11 11:41:43
举报
文章被收录于专栏:Ken的杂谈Ken的杂谈
一、前言
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、服务器&软件环境说明
  • 服务器

一共准备3台CentOS7 Server

服务器名

IP

说明

es1

192.168.1.31

部署ElasticSearch主节点

es2

192.168.1.32

部署ElasticSearch从节点

elk

192.168.1.21

部署Logstash + Kibana + Redis

这里为了节省,只部署2台Elasticsearch,并将Logstash + Kibana + Redis部署在了一台机器上。

如果在生产环境部署,可以按照自己的需求调整。

  • 软件环境

说明

Linux Server

CentOS 7

Elasticsearch

6.0.0

Logstash

6.0.0

Kibana

6.0.0

Redis

4.0

JDK

1.8

2、ELK环境准备

由于Elasticsearch、Logstash、Kibana均不能以root账号运行。

但是Linux对非root账号可并发操作的文件、线程都有限制。

所以,部署ELK相关的机器都要调整:

  • 修改文件限制
代码语言:javascript
复制
# 修改系统文件
vi /etc/security/limits.conf

#增加的内容

* soft nofile 65536
* hard nofile 65536
* soft nproc 2048
* hard nproc 4096
  • 调整进程数
代码语言:javascript
复制
#修改系统文件
vi /etc/security/limits.d/20-nproc.conf

#调整成以下配置
*          soft    nproc     4096
root       soft    nproc     unlimited
  • 调整虚拟内存&最大并发连接
代码语言:javascript
复制
#修改系统文件
vi /etc/sysctl.conf

#增加的内容
vm.max_map_count=655360
fs.file-max=655360

以上操作重启系统后生效

代码语言:javascript
复制
reboot
  • JDK8安装

CentO安装JDK8:https://cloud.tencent.com/developer/article/1333872

  • 创建ELK专用用户
代码语言:javascript
复制
useradd elk
  • 创建ELK相关目录并赋权
代码语言:javascript
复制
#创建ELK APP目录
mkdir /usr/elk
#创建ELK 数据目录
mkdir /elk

#更改目录Owner
chown -R elk:elk /usr/elk
chown -R elk:elk /elk
代码语言:javascript
复制
#打开文件夹
cd /home/download

#下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.tar.gz
wget wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-linux-x86_64.tar.gz

#解压
tar -zvxf elasticsearch-6.0.0.tar.gz
tar -zvxf logstash-6.0.0.tar.gz
tar -zvxf kibana-6.0.0-linux-x86_64.tar.gz
三、Elasticsearch 部署

本次一共要部署两个Elasticsearch节点,所有文中没有指定机器的操作都表示每个Elasticsearch机器都要执行该操作

1、准备工作
  • 移动Elasticsearch到统一目录
代码语言:javascript
复制
#移动目录
mv /home/download/elasticsearch-6.0.0 /usr/elk
#赋权
chown -R elk:elk /usr/elk/elasticsearch-6.0.0/
  • 开放端口
代码语言:javascript
复制
#增加端口
firewall-cmd --add-port=9200/tcp --permanent
firewall-cmd --add-port=9300/tcp --permanent

#重新加载防火墙规则
firewall-cmd --reload
  • 切换账号
代码语言:javascript
复制
#账号切换到 elk
su - elk
  • 数据&日志目录
代码语言:javascript
复制
创建Elasticsearch主目录
mkdir /elk/es
#创建Elasticsearch数据目录
mkdir /elk/es/data
#创建Elasticsearch日志目录
mkdir /elk/es/logs
2、Elasticsearch 配置
  • 修改配置
代码语言:javascript
复制
#打开目录
cd /usr/elk/elasticsearch-6.0.0

#修改配置

vi config/elasticsearch.yml
  • 主节点配置(192.168.1.31)
代码语言:javascript
复制
cluster.name: es 
node.name: es1
path.data: /elk/es/data
path.logs: /elk/es/logs
network.host: 192.168.1.31
http.port: 9200
transport.tcp.port: 9300
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.1.31:9300","192.168.1.32:9300"]
discovery.zen.minimum_master_nodes: 1
  • 从节点配置(192.168.1.32)
代码语言:javascript
复制
cluster.name: es 
node.name: es2
path.data: /elk/es/data
path.logs: /elk/es/logs
network.host: 192.168.1.32
http.port: 9200
transport.tcp.port: 9300
node.master: false
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.1.31:9300","192.168.1.32: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

主节点个数

2、Elasticsearch启动&健康检查
  • 启动
代码语言:javascript
复制
#进入elasticsearch根目录
cd /usr/elk/elasticsearch-6.0.0
#启动
./bin/elasticsearch
  • 查看健康状态
代码语言:javascript
复制
curl http://192.168.1.31:9200/_cluster/health

如果返回status=green表示正常

代码语言:javascript
复制
{
  "cluster_name": "esc",
  "status": "green",
  "timed_out": false,
  "number_of_nodes": 2,
  "number_of_data_nodes": 2,
  "active_primary_shards": 0,
  "active_shards": 0,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 0,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 100.0
}
四、Logstash 配置
1、准备工作
  • 部署Redis

Redis4 安装与配置:https://cloud.tencent.com/developer/article/1333876

由于本次核心是ELK搭建,所以ken.io偷懒,Redis没有部署集群,采用的单节点。

  • 移动Logstash到统一目录
代码语言:javascript
复制
#移动目录
mv /home/download/logstash-6.0.0 /usr/elk
#赋权
chown -R elk:elk /usr/elk/logstash-6.0.0/
  • 切换账号
代码语言:javascript
复制
#账号切换到 elk
su - elk
  • 数据&日志目录
代码语言:javascript
复制
#创建Logstash主目录
mkdir /elk/logstash
#创建Logstash数据目录
mkdir /elk/logstash/data
#创建Logstash日志目录
mkdir /elk/logstash/logs
2、Logstash配置
  • 配置数据&日志目录
代码语言:javascript
复制
#打开目录
cd /usr/elk/logstash-6.0.0
#修改配置
vi config/logstash.yml

#增加以下内容
path.data: /elk/logstash/data
path.logs: /elk/logstash/logs
  • 配置Redis&Elasticsearch
代码语言:javascript
复制
vi config/input-output.conf

#配置内容

input {
  redis {
    data_type => "list"
    key => "logstash"
    host => "192.168.1.21"
    port => 6379
    threads => 5
    codec => "json"
  }
}
filter {
}
output {
  elasticsearch {
    hosts => ["192.168.1.31:9200","192.168.1.32: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

  • 启动
代码语言:javascript
复制
#进入Logstash根目录
cd /usr/elk/logstash-6.0.0
#启动
./bin/logstash -f config/input-output.conf

启动成功后,在启动输出的最后一行会看到如下信息:

代码语言:javascript
复制
[INFO ][logstash.pipeline        ] Pipeline started {"pipeline.id"=>"main"}
[INFO ][logstash.agent           ] Pipelines running {:count=>1, :pipelines=>["main"]}
五、Kibana 配置
  • 移动Kibana到统一目录
代码语言:javascript
复制
#移动目录
mv /home/download/kibana-6.0.0-linux-x86_64 /usr/elk/kibana-6.0.0
#赋权
chown -R elk:elk /usr/elk/kibana-6.0.0/
  • 开放端口
代码语言:javascript
复制
#增加端口
firewall-cmd --add-port=5601/tcp --permanent

#重新加载防火墙规则
firewall-cmd --reload
  • 切换账号
代码语言:javascript
复制
#账号切换到 elk
su - elk
  • 修改配置
代码语言:javascript
复制
#进入kibana-6.0.0根目录
cd /usr/elk/kibana-6.0.0
#修改配置
vi config/kibana.yml

#增加以下内容
server.port: 5601
server.host: "192.168.1.21"
elasticsearch.url: "http://192.168.1.31:9200"
  • 启动
代码语言:javascript
复制
#进入kibana-6.0.0根目录
cd /usr/elk/kibana-6.0.0
#启动
./bin/kibana
  • 访问

浏览器访问: 192.168.1.21: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即可。

数据类型之前在/usr/elk/logstash-6.0.0/config/input-uput.conf中有配置

  • redis命令方式
代码语言:javascript
复制
#启动redis客户端
#执行以下命令
lpush logstash '{"host":"127.0.0.1","type":"logtest","message":"hello"}'
  • Java代码批量写入(引入Jedis)
代码语言:javascript
复制
Jedis jedis = new Jedis("192.168.1.21", 6379);
for (int i = 0; i < 1000; i++) {
    jedis.lpush("logstash", "{\"host\":\"127.0.0.1\",\"type\":\"logtest\",\"message\":\"" + i + "\"}");
}
2、Kibana使用

浏览器访问:192.168.1.21:5601

此时会提示: Configure an index pattern

直接点击create即可

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

大功告成!

七、备注
1、Kibana使用教程
2、 ELK开机启动

ELK开机启动,需要学习下以下知识

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-11-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
    • 1、ELK简介
      • 2、ELK工作流
      • 二、准备工作
        • 1、服务器&软件环境说明
          • 2、ELK环境准备
          • 三、Elasticsearch 部署
            • 1、准备工作
              • 2、Elasticsearch 配置
                • 2、Elasticsearch启动&健康检查
                • 四、Logstash 配置
                  • 1、准备工作
                    • 2、Logstash配置
                    • 五、Kibana 配置
                    • 六、测试
                      • 1、日志写入
                        • 2、Kibana使用
                        • 七、备注
                          • 1、Kibana使用教程
                            • 2、 ELK开机启动
                            相关产品与服务
                            Elasticsearch Service
                            腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档