文章目录
- ELK介绍
- 介绍
- 架构演变
- 环境准备
- Elasticsearch集群安装
- Kibana安装
- Logstash安装
- 常见问题(20191113补)
ELK介绍
介绍
ELK 是elastic公司提供的一套完整的日志收集、展示解决方案,是三个产品的首字母缩写,分别是ElasticSearch、Logstash 和 Kibana,同时加入了 beats 来优化Logstash
ElasticSearch 是一个基于 Lucene 构建的开源,分布式,RESTful 搜索引擎。
Logstash 传输和处理你的日志、事务或其他数据。
Kibana 将 Elasticsearch 的数据分析并渲染为可视化的报表。
Beats 是单一用途的数据传输平台,它可以将多台机器的数据发送到 Logstash 或 ElasticSearch。但 Beats 并不是不可或缺的一环
互联网行业里日志数据非常重要,形式也多种多样。通过日志我们可以计算请求量、流量来源分析、了解用户行为。对于故障排查肯定是希望能够快速的进行日志查询、定位、解决问题,对于实时性要求非常高。
一个完整的集中式日志系统,需要包含以下几个主要特点:
- 收集-能够采集多种来源的日志数据
- 传输-能够稳定的把日志数据传输到中央系统
- 转换— 能够对收集的日志数据进行转换处理
- 存储-如何存储日志数据
- 分析-可以支持 UI 分析
- 告警-能够提供错误报告,监控机制
ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统
架构演变
ELK老架构
用Beats进行采集的架构
本文不讲述beats,只会对ELK三大组件进行安装使用说明
环境准备
- CentOS 7
- ELK版本:6.4.3
- 三台机器
elk01、kibana 10.8.206.46
elk02 10.8.206.47
elk03、logstash 10.8.206.48 - JDK1.8
Elasticsearch集群安装
每台机器都按照相同步骤安装Elasticsearch,但是先不要启动,因为每台机器的配置不一样,需要单独配置。
安装时候,特别要注意的是jvm配置要根据实际机器的内存大小进行配置。
也可以采用先配置好一台,然后将这个elasticsearch打包放到另外两台上,然后再分别修改配置。
修改配置:
vim /usr/local/elk/elasticsearch/elasticsearch-6.4.3/config/elasticsearch.yml
elk01节点
cluster.name: elk-cluster
node.name: elk01
path.data: /usr/local/elk/elasticsearch/data
path.logs: /usr/local/elk/elasticsearch/log
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.8.206.47", "10.8.206.48"]
elk02节点
cluster.name: elk-cluster
node.name: elk02
path.data: /usr/local/elk/elasticsearch/data
path.logs: /usr/local/elk/elasticsearch/log
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.8.206.46", "10.8.206.48"]
elk03节点
cluster.name: elk-cluster
node.name: elk03
path.data: /usr/local/elk/elasticsearch/data
path.logs: /usr/local/elk/elasticsearch/log
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.8.206.46", "10.8.206.47"]
三台机器分别切换到es用户进行启动(启动是可能会报错,基本都是内存、文件描述符的问题,见上面的博客,都有对应解决方案):
su es
/usr/local/elk/elasticsearch/elasticsearch-6.4.3/bin/elasticsearch -d
验证
访问每台机器
http://10.8.206.46:9200/
http://10.8.206.47:9200/
http://10.8.206.48:9200/
获取集群状态
http://10.8.206.46:9200/_cluster/health?pretty
Kibana安装
Kibana主要是用来提供一个ES界面进行可视化查询的,要安装的版本必须和elasticsearch一致!
官网下载对应版本:https://www.elastic.co/downloads/past-releases
或直接在服务器上下载(笔者安装在第一台机器:elk01):
cd /usr/local/src
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.4.3-linux-x86_64.tar.gz
解压并移动:
tar -zxvf kibana-6.4.3-linux-x86_64.tar.gz
mv kibana-6.4.3-linux-x86_64 /usr/local/elk/
修改配置文件:
vim /usr/local/elk/kibana-6.4.3-linux-x86_64/config/kibana.yml
# 连接本机的es
elasticsearch.url: "http://127.0.0.1:9200"
# kibana对外提供服务的端口
server.port: 5601
# 允许外部所有机器远程连接,默认为localhost,只允许本机连接
server.host: "0.0.0.0"
启动:
#非后台启动
/usr/local/elk/kibana-6.4.3-linux-x86_64/bin/kibana
#后台启动
nohup /usr/local/elk/kibana-6.4.3-linux-x86_64/bin/kibana &
kibana使用流程:
- 定义index pattern
- 在discover中查询数据、保存查询
- 在Visualize中为查询创建可视化的图表
- 在dashboard中汇总展示多个数据图表
- 在Timelion中创建时序数据的可视化展示
- 在management中管理各种保存的对象
kibana官方用户手册:
https://www.elastic.co/guide/cn/kibana/current/index.html
Logstash安装
Logstash主要是用来采集数据的,如果一台机器需要采集数据上传到es,则必须在这台机器上安装Logstash,要安装的版本必须和elasticsearch一致!
官网下载对应版本:https://www.elastic.co/downloads/past-releases
或直接在服务器上下载(笔者安装在第三台机器:elk03):
cd /usr/local/src
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.4.3.tar.gz
解压并移动:
tar -zxvf logstash-6.4.3.tar.gz
mv logstash-6.4.3 /usr/local/elk/
接下来做如下几个实验进行验证:
1. 控制台–>控制台
测试控制台输入,控制台输出的情况,进入bin/目录创建test_std_std.conf文件
cd /usr/local/elk/logstash-6.4.3/bin
vim test_std_std.conf
# test_std_std.conf内容如下
input {
stdin {
}
}
output {
stdout {
}
}
启动:
./logstash -f test_std_std.conf
等待一段时间后,输入 hello world,会打印一串内容,如下:
2. 文件–>控制台
测试文件输入,控制台输出的情况,进入bin/目录创建test_file_std.conf文件
cd /usr/local/elk/logstash-6.4.3/bin
vim test_file_std.conf
# test_file_std.conf内容如下
input {
file {
path => "/usr/local/elk/elasticsearch/log/elk-cluster.log"
start_position => "beginning"
}
}
output {
stdout{
codec => rubydebug
}
}
启动:
./logstash -f test_file_std.conf
等待一段时间后,会看到日志文件的内容会被逐行打印出来,如下:
3. 文件–>elasticsearch
测试文件输入,输出到es的情况,进入bin/目录创建test_file_es.conf文件
cd /usr/local/elk/logstash-6.4.3/bin
vim test_file_es.conf
# test_file_es.conf内容如下
input {
file {
path => "/usr/local/elk/elasticsearch/log/elk-cluster.log" #读取哪个文件
start_position => "beginning" #从文件开始处读写
}
}
output {
elasticsearch {
hosts => ["10.8.206.46:9200"] #es http地址
index => "es-test-%{+YYYY.MM.dd}" #索引名称
}
stdout{
codec => rubydebug
}
}
启动:
./logstash -f test_file_es.conf
和上一个例子的不同之处是在于output部分要输出到es
至此ELK安装讲解完毕!
常见问题(20191113补)
问题一:多个网卡情况下,如何指定其中某个网卡发布
如果机器有多个网卡,比如安装docker会多出docker0网卡,如下:
elasticsearch每次启动时都默认选择第一个网卡docker0,是错误的,我想让他指定使用ens33,解决方法:使用 network.publish_host 参数