1.组件介绍简述
Elasticsearch:开源实时分布式搜索和分析引擎,支持大规模数据存储和高吞吐量,提供丰富的搜索功能和可扩展性。
Logstash:开源数据收集引擎,用于实时收集、转换和传输数据,支持多种数据来源和实时数据处理。
Kibana:开源数据可视化工具,用于分析和可视化 Elasticsearch 中的数据,提供直观的界面和工具,支持数据可视化、查询构建和用户权限管理。
2.集群规划
java环境提前安装好
主机名 | IP地址 | 处理器(s) | 内存(GB) | 组件 | 版本 |
---|---|---|---|---|---|
test-server02 | 192.168.40.181 | 2 | 4 | Elasticsearch、cerebro | 7.17.18、0.94 |
test-server03 | 192.168.40.182 | 4 | 4 | Logstash | 7.17.18 |
test-server04 | 192.168.40.183 | 2 | 2 | Kibana | 7.17.18 |
3.Es组件部署
Elasticsearch单节点部署
- 下载Elasticsearch
- 安装Elasticsearch
#上传部署包
[root@test-server02 opt]# ll /opt/elasticsearch-7.17.18-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 327087494 Feb 8 14:23 /opt/elasticsearch-7.17.18-linux-x86_64.tar.gz
#解压部署包
[root@test-server02 opt]# tar -xf elasticsearch-7.17.18-linux-x86_64.tar.gz
#创建软连接
[root@test-server02 opt]# ln -s /opt/elasticsearch-7.17.18 elasticsearch
- 配置Elasticsearch
[root@test-server02 opt]# cd elasticsearch/config/
[root@test-server02 config]# cat elasticsearch.yml | grep -v '^\s*#' | grep -v '^\s*$'
cluster.name: es-test-cluster
node.name: test-server02
path.data: /opt/elasticsearch/data
path.logs: /opt/elasticsearch/logs
network.host: 192.168.40.181
http.port: 9200
discovery.seed_hosts: ["192.168.40.181"]
cluster.initial_master_nodes: ["test-server02"]
#下面两行新增
node.master: true
node.data: true
#配置介绍
1. cluster.name:集群名称,所有节点必须使用相同的集群名称以便彼此识别和连接。
2. node.name:节点名称,用于标识集群中的每个节点。
3. path.data:数据存储路径,指定Elasticsearch用于存储数据的目录路径。
4. path.logs:日志存储路径,指定Elasticsearch用于存储日志的目录路径。
5. network.host:节点绑定的网络地址,指定Elasticsearch监听的网络地址。
6. http.port:HTTP端口,用于与Elasticsearch进行RESTful API通信的端口号。
7. discovery.seed_hosts:发现种子节点,用于节点发现和集群组建。
8. cluster.initial_master_nodes:初始主节点列表,指定集群中第一批主节点的名称。
9. node.master:指定节点是否可以成为主节点,即负责集群级别操作的节点。
10. node.data:指定节点是否可以存储数据,即节点是否可以作为数据节点存储索引数据。
- 创建数据目录和普通用户
#创建数据目录
[root@test-server02 opt]# mkdir /opt/elasticsearch/data
#新增普通用户
[root@test-server02 opt]# useradd elastic
#修改普通用户密码
[root@test-server02 opt]# passwd elastic
elastic/elastic
#授予普通用户权限
[root@test-server02 opt]# chown -R elastic:elastic elasticsearch*
- 修改系统配置
[root@test-server02 ~]# vim /etc/sysctl.conf
#最下面新增此参数
vm.max_map_count=262144
不修改此参数启动会报错:bootstrap check failure [1] of [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
意思是:
最大虚拟内存区域 vm.max_map_count [65530] 太低,请至少增加到 [262144]
这个 vm.max_map_count 在没有配置的情况下,默认是 65530,因为默认的比较少,不足以支撑es启动,所以我们需要去配置一下这个参数
- 启动Elasticsearch
[root@test-server02 ~]# su - elastic -c "/opt/elasticsearch/bin/elasticsearch --daemonize --silent"
- 安装Cerebro
Elasticsearch的管理工具Cerebro部署
1.下载部署包
https://github.com/lmenezes/cerebro/releases/download/v0.9.4/cerebro-0.9.4.tgz
#可以通过github下载通过github下载
#百度网盘下载
通过网盘分享的文件:cerebro-0.9.4.tgz
链接: https://pan.baidu.com/s/1Nr81_wTVV9d3FPmfn14XyA 提取码: 1021
2.上传文件
[root@test-server02 opt]# ll cerebro-0.9.4.tgz
-rw-r--r-- 1 root root 57244792 Feb 12 13:37 cerebro-0.9.4.tgz
3.解压部署包
[root@test-server02 opt]# tar -xf cerebro-0.9.4.tgz
4.修改配置
[root@test-server02 opt]# cd cerebro-0.9.4/conf/
[root@test-server02 conf]# vim application.conf
#最下面修改成Es的IP和集群名称
- 启动cerebro
[root@test-server02 cerebro-0.9.4]# nohup /opt/cerebro-0.9.4/bin/cerebro -Dhttp.port=1234 -Dhttp.address=192.168.40.181 &
- 访问cerebro页面
IP:1234
Es节点是正常状态
4.Logstash组件部署
Logstash单节点部署
- 下载Logstash
- 安装Logstash
#上传部署包
[root@test-server03 opt]# ll logstash-7.17.18-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 364233835 Feb 10 09:04 logstash-7.17.18-linux-x86_64.tar.gz
#解压部署包
[root@test-server03 opt]# tar -xf logstash-7.17.18-linux-x86_64.tar.gz
#创建软连接
[root@test-server03 opt]# ln -s /opt/logstash-7.17.18 logstash
- 配置Logstash
[root@test-server03 opt]# cd logstash/config/
[root@test-server03 config]# cat logstash.yml | grep -v '^\s*#' | grep -v '^\s*$'
node.name: test-logstash-node
path.data: /opt/logstash/data
api.http.host: 192.168.40.182
api.http.port: 9600
path.logs: /opt/logstash/logs
#配置介绍
1.node.name: test-logstash-node:Logstash 实例的节点名称。
2.path.data: /opt/logstash/data:Logstash 存储内部数据的路径。
3.api.http.host: 192.168.40.182:Logstash API 监听的主机 IP 地址。
4.api.http.port: 9600:Logstash API 监听的端口号。
5.path.logs: /opt/logstash/logs:Logstash 日志文件的存储路径。
- 创建日志目录和普通用户
#创建日志目录
[root@test-server03 opt]# mkdir /opt/logstash/logs
#新增普通用户
[root@test-server03 opt]# useradd logstash
#修改普通用户密码
[root@test-server03 opt]# passwd logstash
logstash/logstash
#授予普通用户权限
[root@test-server03 opt]# chown -R logstash.logstash logstash*
- 新建Logstash文件
[root@test-server03 config]# cat logstash.conf
input {
file {
path => "/var/log/nginx/access.log" # Nginx access.log 路径
start_position => "beginning" # 从头读取日志
sincedb_path => "/dev/null" # 每次重新读取日志
codec => "plain" # 日志编码格式
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
output {
elasticsearch {
hosts => ["http://192.168.40.181:9200"] # Elasticsearch 地址
index => "nginx-logs-%{+YYYY.MM.dd}" # 索引名称,按日期分割
}
stdout { codec => rubydebug } # 控制台输出调试信息
}
#根据自己的需求去修改即可。或者通过ai去生成
- 赋予其他用户可读文件的权限
[root@test-server03 opt]# chmod o+r /var/log/nginx/access.log
#由于logstash是普通用户权限,如果不给文件赋予其他用户可读权限,logstash打不开这个文件然后会导致获取数据失败
- 启动Logstash
[root@test-server03 opt]# su logstash
[logstash@test-server03 opt]$ nohup /opt/logstash/bin/logstash -f /opt/logstash/config/logstash.conf > /dev/null 2>&1 &
- 测试Logstash状态
[root@test-server03 opt]# curl -XGET 'http://192.168.40.182:9600/_node/pipelines?pretty'
{
"host" : "test-server03",
"version" : "7.17.18",
"http_address" : "192.168.40.182:9600",
"id" : "f6df67d3-31c3-4551-98f1-30746b4b8563",
"name" : "test-logstash-node",
"ephemeral_id" : "ceac450a-b68a-43df-aefe-0e9b6717ff76",
"status" : "green",
"snapshot" : false,
"pipeline" : {
"workers" : 8,
"batch_size" : 125,
"batch_delay" : 50
},
"pipelines" : {
"main" : {
"ephemeral_id" : "d60bbfb7-08e6-4a4e-ae42-75b181632638",
"hash" : "f58943ecfa9938796137f154d88da0c3b41eb40533e353aa6d9d57362a13a3b6",
"workers" : 8,
"batch_size" : 125,
"batch_delay" : 50,
"config_reload_automatic" : false,
"config_reload_interval" : 3000000000,
"dead_letter_queue_enabled" : false
}
}
}
- 查看Es是否创建了新的索引
出现此问题的原因是:副本分片无法分配的原因是因为副本分片不能和主分片在同一个节点上。此问题可以忽略,生产环境不会出现此问题。
- 短暂解决目前问题
状态正常
此时nginx的日志已经进入到了Es集群
5.Kibana组件部署
- 下载Kibana
- 安装Kibana
#上传部署包
[root@test-server04 opt]# ll kibana-7.17.18-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 301593515 Feb 11 13:51 kibana-7.17.18-linux-x86_64.tar.gz
#解压部署包
[root@test-server04 opt]# tar -xf kibana-7.17.18-linux-x86_64.tar.gz
#创建软连接
[root@test-server04 opt]# ln -s /opt/kibana-7.17.18-linux-x86_64 kibana
- 配置Kibana
[root@test-server04 kibana]# cd config/
[root@test-server04 config]# cat kibana.yml | grep -v '^\s*#' | grep -v '^\s*$'
server.port: 5601
server.host: "192.168.40.183"
server.name: "test-server04"
elasticsearch.hosts: ["http://192.168.40.181:9200"]
logging.dest: /opt/kibana/logs/kibana.log
logging.verbose: true
i18n.locale: "zh-CN"
#配置介绍
1.server.port:设置 Kibana 的 Web 服务端口(默认为 5601)。
2.server.host:设置 Kibana 监听的 IP 地址,指定机器的 IP 或 localhost。
3.server.name:Kibana 实例的名称,用来标识。
4.elasticsearch.hosts:配置 Kibana 连接的 Elasticsearch 地址。
5.logging.dest:设置 Kibana 的日志文件路径。
6.logging.verbose:开启详细日志(true 为详细,false 为普通)。
7.i18n.locale:设置 Kibana 的语言,zh-CN 为简体中文。
- 创建日志目录和普通用户
#创建日志目录
[root@test-server04 opt]# mkdir kibana/logs
#新增普通用户
[root@test-server04 opt]# useradd kibana
#修改普通用户密码
[root@test-server04 opt]# passwd kibana
#赋予普通用户权限
[root@test-server04 opt]# chown -R kibana.kibana kibana*
- 启动Kibana
su - kibana -c "nohup /opt/kibana/bin/kibana > /dev/null 2>&1 &"
6.Kibana的基础使用
- 访问Kibana Web页面
IP:5601
选择Discover
创建索引模式
12号下午两点半产生了8条日志