一、前言
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相关的机器都要调整:
修改文件限制
123456789修改系统文件vi /etc/security/limits.conf增加的内容* soft nofile 65536* hard nofile 65536* soft nproc 2048* hard nproc 4096调整进程数
|
|
- 调整虚拟内存&最大并发连接
|
|
保存之后执行 sysctl -p 生效
JDK8安装
CentO安装JDK8:https://ken.io/note/centos-java-setup创建ELK专用用户
|
|
- 创建ELK相关目录并赋权
|
|
- 下载ELK包并解压
https://www.elastic.co/downloads123456789101112#打开文件夹cd /home/download#下载wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.tar.gzwget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.tar.gzwget wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-linux-x86_64.tar.gz#解压tar -zvxf elasticsearch-6.0.0.tar.gztar -zvxf logstash-6.0.0.tar.gztar -zvxf kibana-6.0.0-linux-x86_64.tar.gz
三、Elasticsearch 部署
本次一共要部署两个Elasticsearch节点,所有文中没有指定机器的操作都表示每个Elasticsearch机器都要执行该操作
1、准备工作
移动Elasticsearch
到统一目录
开放端口
123456#增加端口firewall-cmd --add-port=9200/tcp --permanentfirewall-cmd --add-port=9300/tcp --permanent#重新加载防火墙规则firewall-cmd --reload切换账号
12#账号切换到 elksu - elk数据&日志目录
123456# 创建Elasticsearch主目录mkdir /elk/es#创建Elasticsearch数据目录mkdir /elk/es/data#创建Elasticsearch日志目录mkdir /elk/es/logs
2、Elasticsearch 配置
修改配置
12345#打开目录cd /usr/elk/elasticsearch-6.0.0#修改配置vi config/elasticsearch.yml主节点配置(192.168.1.31)
1234567891011cluster.name: esnode.name: es1path.data: /elk/es/datapath.logs: /elk/es/logsnetwork.host: 192.168.1.31http.port: 9200transport.tcp.port: 9300node.master: truenode.data: truediscovery.zen.ping.unicast.hosts: ["192.168.1.31:9300","192.168.1.32:9300"]discovery.zen.minimum_master_nodes: 1从节点配置(192.168.1.32)
1234567891011cluster.name: esnode.name: es2path.data: /elk/es/datapath.logs: /elk/es/logsnetwork.host: 192.168.1.32http.port: 9200transport.tcp.port: 9300node.master: falsenode.data: truediscovery.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启动&健康检查
启动
1234#进入elasticsearch根目录cd /usr/elk/elasticsearch-6.0.0#启动./bin/elasticsearch查看健康状态
1curl http://192.168.1.31:9200/_cluster/health
如果返回status=green表示正常
四、Logstash 配置
- 1、准备工作
部署Redis
Redis4 安装与配置:https://ken.io/note/centos7-redis4-setup
由于本次核心是ELK搭建,所以ken.io偷懒,Redis没有部署集群,采用的单节点。移动Logstash到统一目录
1234#移动目录mv /home/download/logstash-6.0.0 /usr/elk#赋权chown -R elk:elk /usr/elk/logstash-6.0.0/切换账号
12#账号切换到 elksu - elk数据&日志目录
123456#创建Logstash主目录mkdir /elk/logstash#创建Logstash数据目录mkdir /elk/logstash/data#创建Logstash日志目录mkdir /elk/logstash/logs2、Logstash配置
配置数据&日志目录
12345678#打开目录cd /usr/elk/logstash-6.0.0#修改配置vi config/logstash.yml#增加以下内容path.data: /elk/logstash/datapath.logs: /elk/logstash/logs配置Redis&Elasticsearch
12345678910111213141516171819202122232425vi config/input-output.conf#配置内容input {redis {data_type => "list"key => "logstash"host => "192.168.1.21"port => 6379threads => 5codec => "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 |
- 启动1234#进入Logstash根目录cd /usr/elk/logstash-6.0.0#启动./bin/logstash -f config/input-output.conf
启动成功后,在启动输出的最后一行会看到如下信息:
五、Kibana 配置
- 移动Kibana到统一目录
|
|
开放端口
12345#增加端口firewall-cmd --add-port=5601/tcp --permanent#重新加载防火墙规则firewall-cmd --reload切换账号
12#账号切换到 elksu - elk修改配置
123456789#进入kibana-6.0.0根目录cd /usr/elk/kibana-6.0.0#修改配置vi config/kibana.yml#增加以下内容server.port: 5601server.host: "192.168.1.21"elasticsearch.url: "http://192.168.1.31:9200"启动
1234#进入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命令方式
|
|
- 2、Kibana使用
浏览器访问:192.168.1.21:5601
此时会提示: Configure an index pattern
直接点击create即可
浏览器访问:192.168.1.21:5601/app/kibana#/discover 即可查看日志
大功告成!
七、备注
1、Kibana使用教程
https://segmentfault.com/a/11900000029724202、 ELK开机启动
ELK开机启动,需要学习下以下知识nohup命令使用:https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/index.html
- 自定义系统服务,可以参考Redis的开机启动:https://ken.io/note/centos7-redis4-setup