一、ELK说明
ELK是Elasticsearch(ES) + Logstash + Kibana 这三个开源工具组成,官方网站: The Elastic Search AI Platform --- Drive real-time insights | Elastic
简单的ELK架构
ES: 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。
Kibana: 可以对 Elasticsearch 进行可视化,还可以在 Elastic Stack 中进行导航,这样便可以进行各种操作了,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。
Logstash: 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的"存储库"中。一般用在日志的搜集、分析、过滤,支持大量的数据获取方式。
Filebeat:收集文件数据。
二、基础环境
- 准备以下几台机器:
|----------|---------------------|---------|----------------------|
| 主机 | 服务器角色 | 主机系统 | 软件版本 |
| es-node1 | Elasticsearch(搜索引擎) | Centos7 | Elasticsearch:7.15.5 |
| es-node2 | Elasticsearch(搜索引擎) | Centos7 | Elasticsearch:7.15.5 |
| es-node3 | Elasticsearch(搜索引擎) | Centos7 | Elasticsearch:7.15.5 |
| kibana | Kibana(界面展示) | Centos7 | Kibana:7.15.5 |
| logstash | Logstash(日志处理) | Centos7 | Logstash:7.15.5 |
| filebeat | Filebeat(日志收集) | Centos7 | Filebeat:7.15.5 |
- 关闭selinux
3.主机之间同步时间
三、Elasticsearch集群部署
3.1 前提准备
3.1.1 安装包下载
https://www.elastic.co/cn/downloads/past-releases#elasticsearch 进行下载相应的产品版本,点击"Download"后选择需要的方式包进行下载,本文以linux 二进制方式进行部署
3.1.2 创建用户及授权(注:每个节点都需要操作)
ElasticSerach要求以非root身份启动,在每个节点创建用户及用户组
|-----|---------------------------------------------------------------------|
| 1 2 | groupadd elasticsearch
useradd
elasticsearch -g elasticsearch
|
解压安装包并附所属权
tar
-xvzf elasticsearch-7.17.5-linux-x86_64.``tar``.gz -C ``/home/elasticsearch
chown
-R elasticsearch:elasticsearch ``/home/elasticsearch/elasticsearch-7``.17.5
在每个节点上创建数据data和logs目录:
|-----|--------------------------------------------------|
| 1 2 | mkdir
-p ``/data/elasticsearch/``{data,logs}
|
3.1.3 java环境
配置环境变量
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ## 在/etc/profile 下添加
## set java environment
JAVA_HOME=``/home/elasticsearch/elasticsearch-7``.17.5``/jdk
CLASSPATH=$JAVA_HOME``/lib/
PATH=$PATH:$JAVA_HOME``/bin
export
PATH JAVA_HOME CLASSPATH
|
使环境变量生效并验证
|-----|-----------------------------------------|
| 1 2 | source
/etc/profile
java -version
|
3.1.4 内存不能锁定问题(可选)
|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 | ## 在配置 ElasticSearch 服务过程中,我们一般要设置 bootstrap.memory_lock 为 true,避免内存数据被交换到 SWAP 分区中。
cat
/etc/systemd/system``.conf |``grep
DefaultLimitMEMLOCK
## 需要修改为:
DefaultLimitMEMLOCK=infinity
|
注:需要重启机器
3.1.5 修改vm.max_map_count
修改一个进程可以拥有的VMA(虚拟内存区域)的数量
vim /etc/sysctl.conf 调整:
vm.max_map_count=262144
执行:sysctl -p 生效
3.2 配置
3.2.1 修改elasticsearch配置文件
配置elasticsearch.yml文件说明:
bash
node.name: node-1 #每个节点不一样
#节点是否具有成为主节点的资格
node.master: true
#节点是否存储数据
node.data: true
#ES 数据保存目录
path.data: /data/elasticsearch/data
#ES 日志保存目
path.logs: /data/elasticsearch/logs
#服务启动的时候锁定足够的内存,防止数据写入
swapbootstrap.memory_lock: true
#监听
IPnetwork.host: 0.0.0.0
#监听端口
http.port: 9200
#集群中 node 节点发现列表
discovery.seed_hosts: ["10.10.100.110", "10.10.100.111","10.10.100.112"]
#集群初始化那些节点可以被选举为
mastercluster.initial_master_nodes: ["10.10.100.110", "10.10.100.111","10.10.100.112"]
#一个集群中的 N 个节点启动后,才允许进行数据恢复处理,默认是 1
gateway.recover_after_nodes: 2
####设置是否可以通过正则或者_all 删除或者关闭索引库,
####默认 true 表示必须需要显式指定索引库名称,
####生产环境建议设置为 true,
####删除索引库的时候必须指定,否则可能会误删索引库中的索引库。
action.destructive_requires_name: true
node1节点
|---|-----------------------------------------------|
| 1 | grep
-Ev ``"^$|^[#;]"
elasticsearch.yml
|
node2节点
grep
-Ev ``"^$|^[#;]"
elasticsearch.yml
node3节点
|---|-----------------------------------------------|
| 1 | grep
-Ev ``"^$|^[#;]"
elasticsearch.yml
|
3.2.2 修改JVM内存限制
|---------|-----------------------------------------------------------------------------------------|
| 1 2 3 4 | 在vm.options 中调整:
-Xms2g
-Xmx2g ``#最小和最大内存限制
#官方配置文档最大建议 30G 以内,默认是1G,根据实际情况进行调整
|
3.2.3 开启跨域访问支持(可选)
|-----------|----------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | 在elasticsearch.yml文件中配置一下2个参数:
#开启支持跨域访问
http.cors.enabled: ``true
#指定允许访问范围
http.cors.allow-origin: ``"*"
|
3.3 启动并验证
|-------|---------------------------------------------------------------------------------------|
| 1 2 3 | ## 启动:
su
- elasticsearch
.``/elasticsearch-7``.17.5``/bin/elasticsearch
-d
|
|--------------------------------------------------------------------------------------|
| 查看监听端口,分别是9200和9300:
netstat
-ant|``grep
9200
netstat
-ant|``grep
9300
|
浏览器访问查看:
查看集群健康状态:http://IP:9200/_cluster/health?pretty
查看集群详细信息:http://IP:9200/_cluster/state?pretty
查看索引列表:http://IP:9200/_cat/indices?v
四、Kibana部署
本文复用ES的一台机器进行部署,实际环境可以单独部署一台。
4.1 前提准备
4.1.1 安装包下载
在https://www.elastic.co/cn/downloads/past-releases#kibana 进行下载相应的软件版本
4.1.2 创建用户及授权
|-----|------------------------------------------------|
| 1 2 | groupadd kibana
useradd
kibana -g kibana
|
4.1.3 解压安装包并附所属权
|---|-----------------------------------------------------------------------|
| 1 | tar
-xzvf kibana-7.17.5-linux-x86_64.``tar``.gz -C ``/home/kibana
|
|------------------------------------------------------------------------|
| chown
-R kibana:kibana ``/home/kibana/kibana-7``.17.5-linux-x86_64
|
4.1.4 创建日志目录并附所属权
|-----|-----------------------------------------------------------------------------|
| 1 2 | mkdir
-p ``/data/kibana/logs/
chown
-R kibana:kibana ``/data/kibana
|
4.2 配置
|---|----------------------------------------|
| 1 | grep
-Ev ``"^$|^[#;]"
kibana.yml
|
4.3 启动并验证
使用kibana账号启动
4.3.1 启动
|-----|---------------------------------------------------------------------------------------------------------------------|
| 1 2 | su
- kibana
.``/kibana-7``.17.5-linux-x86_64``/bin/kibana
--allow-root > ``/data/kibana/logs/kibana``.log &
|
|----------------------------------------------|
| 停止:
kill
-9 ````lsof`
-i :5601 -t``` |
4.3.2 验证
|-----|-------------------------------------------|
| 1 2 | ## 端口验证:
netstat
-ant|``grep
5601
|
浏览器验证:http:IP:5601
五、Logstash部署
5.1 准备
5.1.1 安装包下载
通过官网下载链接: https://www.elastic.co/cn/downloads/past-releases#logstash 选择对应的版本
5.1.2 创建数据和日志目录
|---|---------------------------------------------|
| 1 | mkdir
-p ``/data/logstash/``{logs,data}
|
5.2 配置
5.2.1 修改logstash配置文件(可以不修改)
|---|------------------------------------------|
| 1 | grep
-Ev ``"^$|^[#;]"
logstash.yml
|
5.2.2 创建监控日志的配置文件
bash
Logstash可以直接采集日志文件;本文采用filebeat收集日志,logstash处理日志
input {
beats {
port => 5044
codec => plain{ charset => "GB2312" }
}
}
filter{
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:logdate}" }
}
date {
match => [ "logdate","ISO8601"]
target => "@timestamp"
}
mutate{
remove_field => "logdate"
}
}
output {
elasticsearch {
hosts => ["10.211.55.5:9200"] # 定义es服务器的ip
index => "emqx-%{+YYYY.MM.dd}" # 定义索引
}
}
|-------------------------------------------|
| grep
-Ev ``"^$|^[#;]"
logstash.conf
|
5.3 启动
## 默认端口:9600,执行命令后需要等一会儿启动成功。
.``/bin/logstash
-f config``/logstash``.conf &
5.4 验证
六、Filebeat部署
6.1准备
官网下载安装包链接:https://www.elastic.co/cn/downloads/past-releases#filebeat ,选择对应版本
6.2 配置
bash
filebeat安装后,只需要配置好监控的日志。包含input和output 等。
filebeat.inputs:
# 第一个输入
- type: log
#是否启用
enabled: true
# 自定义标签
tags: ["qgzhdc-px-data-node"]
# 收集日志的文件路径,可以使用通配附*等
paths:
- /home/bagpipes/emqx/log/emqx.log.*
- /home/bagpipes/emqx/log/abc.*.txt
encoding: GB2312
####fields 自定义字段与值,这个在检索日志时使用,
###会给每条日志增加此key与value,能够标识出日志来源。
fields:
ip: 10.211.55.5
# fields_under_root如果为false,则fields下的key会挂到fields下,true的话
fields_under_root: true
multiline:
type: pattern
pattern: '^\d{4}-\d{1,2}-\d{1,2}T\d{1,2}:\d{1,2}:\d{1,2}.\d{6}\+\d{1,2}:\d{1,2}'
negate: true
match: after
output.logstash:
hosts: ["10.211.55.5:5044"]
6.3 启动
|-----|------------------------------------------------------------------------------|
| 1 2 | ## 后台启动:
nohup
.``/filebeat
-e -c filebeat.yml >``/dev/null
2>&1 &
|
6.4 验证
进程启动验证:
七、完整应用验证
首先所有服务都正常启动。
7.1 F ilebeat验证
如何通过filebeat数据正常处理完成并输出符合预期的内容,可以采用输出到控制台进行调试验证,在filebeat.yml配置文件中调整输出为控制台方式:
7.2 L ogstash验证
如何通过logstash数据正常处理完成并输出符合预期的内容,可以采用输出到控制台进行调试验证,在logstash.conf 配置文件中调整输出为控制台方式:
7.3 ES验证
通过地址api查看是否有相应的索引自动创建并占用存储:http://IP:9200/_cat/indices?v
7.4 K ibana验证
7.4.1 创建索引模版
按照截图中,进入management 中,选择"stack management"
7.4.2 查看索引
点击"Discover"
进入日志查询界面