作者:默念我覀想你A_193 | 来源:互联网 | 2023-08-24 14:14
前言
因公司开发人员需要查询线上日志的需求,运维搭建了一套elk,在当时很好的满足了开发人员的需求,但随着接入的项目增多,在加上前期使用没有做什么调研与规划,导致后面出现很多诸如 ”命名不规范“ ”索引模式无法匹配“ ”报警错乱“ ”索引分片分配过多“ ”索引删除不了“ 这类问题,依靠着”人工智能“一遍遍的把这类问题 ”修复“ 好,最后因为 logstash 占用的内存实在是太大,严重影响其他业务系统正常运行。而笔者这时候在查阅了一些资料后,发现 filebeat 是被设计用来替换logstash 的轻量级数据采集器。经过一番了解后,笔者决定自行搭建一套efk,并遵循业界最佳实践,提供统一的规范,统一的管理。让日志管理高大上一把。
环境准备
服务器
通过 hyper-v 准备了三台 centos 7,配置1核4g。
efk 版本
通过官网下载对应的 rpm 包进行安装即可。这里用的均为 7.5.2。
elasticsearch 集群管理工具
推荐用 cerebro 通过 github 下载最新的 rpm 包安装即可。
安装及配置
elasticsearch 分别安装在三台服务器上,部署成冷热架构,一个hot节点,两个warm节点,kibana、filebeat 安装在任意一台服务器上即可。# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
cluster.name: my-cluster
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: node-1
node.attr.box_type: hot
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
path.data: var/lib/elasticsearch
#
# Path to log files:
#
path.logs: var/log/elasticsearch
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 192.168.117.227
#
# Set a custom port for HTTP:
#
http.port: 9200
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
discovery.seed_hosts: ["192.168.117.227","192.168.117.229","192.168.117.58"]
discovery.zen.minimum_master_nodes: 2
#
# Bootstrap the cluster using an initial set of master-eligible nodes:
#
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
#
# For more information, consult the discovery and cluster formation module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
gateway.recover_after_nodes: 2
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
action.destructive_requires_name: true
这是其中一台的 elasticsearch.yml 配置,其他两台相似,只有少部分配置项不同,这里不在重复陈述。
通过如下指令来启动一个 elasticsearch 实例systemctl start elasticsearch.service
3.启动 elasticsearch 后常见错误解决useradd 账号名 -g 组名 -p 密码
chown -R 账号名:组名
通过 useradd 创建一个组用户,在利用 chown 指令为特定的文件赋予账号权限
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
b.修改 /etc/security/limits.conf 文件,增加如下配置,用户退出后重新登录生效* soft nofile 65536
* hard nofile 65536
max number of threads [3818] for user [es] is too low, increase to at least[4096]
b.修改 /etc/security/limits.conf 文件,增加如下配置,用户退出后重新登录生效* soft nproc 4096
* hard nproc 4096
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
a.修改 /etc/sysctl.conf 文件
b.执行如下命令生效或是重启
memory locking requested for elasticsearch process but memory is not locked
启用 bootstrap.memory_lock: true 后
a.临时性方案适用于非systemd管理
b.永久性方案修改 /etc/security/limits.conf
* soft memlock unlimited
* hard memlock unlimited
这里的*代表的是所有用户名称,可以更换为指定用户名
另:这里有个坑就是如果/etc/security/limits.d文件夹下有配置文件,那么会覆盖刚才修改的文件,所以请确保该目录没有其它文件
c.修改 /etc/sysctl.conf
这个参数的作用是告诉linux内核尽量少的使用swap分区,不等于禁用swap,通过少使用swap来提高性能。
d.执行如下命令生效或重启
4.kibana、filebeat、cerebro 配置和启动基本不会涉及到什么错误需要解决,且网上参考资料也很多,故这里不在做陈述了。后续这里会结合 elasticsearch 开启 ssl 和 https 后,会在详细介绍下这几个组件如何与之通信。
写在最后
本篇介绍了 elasticsearch 启动后的一些可能出错问题的解决方法,下一篇将继续介绍下如何为 elasticsearch 开启 ssl 和 https。
如有收获,点个在看,诚挚感谢。