之前分别写过关于使用 ES 来做日志统一管理,以及在 CentOS 上部署 Redis 哨兵集群的博客,今儿的话题还是要围绕他们,这次是 CentOS 和 ELK 的交集。
之前我们的 ES 日志集群是在 Windows 系统下运行的,这两天上头给批了两台 CentOS 的主机,就把日志的集群迁移到了 CentOS 服务器上。迁移的过程总体还是比较顺利,但过程中还是遇到了一些问题,或者说我个人感觉应该要记录一下的东西,在这里简单总结一下。
一、Elasticsearch 版本选择
官方的建议是,选择最新的版本~,这其实也是我在选择开源组件的基本原则,大多数情况下,越新的产品,性能,功能完整性也会越好,尤其是 ES 这种级别的软件。但因为我是从 Windows 服务器上迁移过来,所以我选择了和之前 Windows 一致的版本,7.14.1(当前最新的是 7.15.1)。
这里需要提一句的是,如果是 es 的老用户,都应该清楚,es 在发布产品的时候,都是捆绑发布的,不如 es 发布了 7.14.1,对应的 kibana,logstash,beats 等等,也会有相同的版本跟着发布,所以如果 es 选了 7.14.1,用其余产品的时候,也要选同样的版本!
二、下载安装
官方的下载提供了很多种类型,比如为 Windows 提供了 msi,为 linux 提供了 deb,rpm 等,还有压缩包的类型。
这里我个人建议是统一用压缩包的类型,因为可能会涉及到迁移或者集群部署,用压缩包的形式,解压后可以很方便的修改配置文件,对文件目录授权,以及设定服务启动方式等。
官方的下载指导页如下:https://www.elastic.co/cn/downloads/elasticsearch
对应的 Kibana,logstash 就是把链接最后的内容改成对应的名字即可
压缩包下载后,对应安装即可,我这里是建立了一个上层目录,然后把 es,kibana 和 logstash 都分别安装到了里面,方便管理。
三、配置集群
3.1 ElastercSearch 配置
这里先给出官方的配置指导页:https://www.elastic.co/guide/en/elasticsearch/reference/7.14/settings.html,我这个是 7.14,如果你用别的版本,就把链接里的版本号改一下就好。
官方指导里,分别给出了源于 elasticsearch.yml,jvm.options,log4j2.propertites 三给关键配置文件的配置说明。我这里只用到了第一个,官方指导了也提到了,对于后两项,分别是调整 Java 虚拟机和日志的选项,一般情况下不需要修改,按默认配置即可。如果是二般情况,就再根据说明按需调整。
# 节点1
# ---------------------------------- Cluster -----------------------------------
# 集群名字,每个集群内的节点应该保持一致
cluster.name: magicloud-cluster
# ------------------------------------ Node ------------------------------------
# 节点名称
node.name: es-node1
# 是否可以被选举为主节点
node.master: true
# 是否为数据节点(存储空间足够的情况下,我个人建议把每个节点都设定成可存储数据的节点,这样会最大限度保证数据分片不会丢失)
node.data: true
# ----------------------------------- Paths ------------------------------------
# 数据和日志存放地址,根据官方建议,在生产环境下,这里把数据放到了$ES_HOME之外的位置。
# https://www.elastic.co/guide/en/elasticsearch/reference/7.14/important-settings.html
path.data: /usr/local/elasticsearch/data
path.logs: /usr/local/elasticsearch/logs
# ---------------------------------- Network -----------------------------------
# 网络配置,默认是127.0.0.1的回环地址,修改成要暴露的ip或者直接0.0.0.0
network.host: 0.0.0.0
# 端口,默认9200,个人不建议修改,不为别的,主要是其他开发或者运维人员一看到9200就知道es在跑着,辨识度较高
http.port: 9200
# --------------------------------- Discovery ----------------------------------
# 集群发现,发现集群内的其他节点,把集群内的节点地址写在这里,官方说也可以写节点名字,但我试了名字不好使,没细研究~~
discovery.seed_hosts: ["10.185.1.176:9300", "10.185.1.178:9300", "10.185.1.75:9301"]
# 初始的主节点,也可以不设置
cluster.initial_master_nodes: ["es-node1"]
# ---------------------------------- Various -----------------------------------
# 为了防止误删除,禁止使用通配符或_all删除索引
action.destructive_requires_name: true
# 节点的通信地址,也就是discovery里配置的节点ip和port,建议host就是本机ip,port就是9300,也是辨识度较高
transport.host: 10.185.1.178
transport.tcp.port: 9300
复制代码
#节点2和其他节点
# ---------------------------------- Cluster -----------------------------------
cluster.name: magicloud-cluster
# ------------------------------------ Node ------------------------------------
node.name: es-node2
node.master: true
node.data: true
# ----------------------------------- Paths ------------------------------------
path.data: /usr/local/elasticsearch/data
path.logs: /usr/local/elasticsearch/logs
# ---------------------------------- Network -----------------------------------
network.host: 0.0.0.0
http.port: 9200
# --------------------------------- Discovery ----------------------------------
discovery.seed_hosts: ["10.185.1.176:9300", "10.185.1.178:9300", "10.185.1.75:9301"]
# ---------------------------------- Various -----------------------------------
action.destructive_requires_name: true
transport.host: 10.185.1.178
transport.tcp.port: 9300
复制代码
配置文件的关键配置就是这些,关于 es 的配置,还有几个关键的点
1.修改 /etc/security/limits.conf,在配置文件最下面添加
* soft nofile 65535
* hard nofile 65535
复制代码
否则启动 es 的时候会报错,其实按报错的提示修改即可。
错误大概是这样 max number of threads [2048] for user [elasticsearch] is too low, increase to at least [4096]
2.在 es 7.x 的版本,不可以通过 root 用户启动 es,这个可以强制修改,但还是按官方的建议来比较好,操作也比较简单
groupadd elsearch #1.添加新的管理组
useradd -m -g elsearch elsearch- #2.添加新管理组下的用户
passwd elsearch #3.回车后输入密码
chown -R elsearch:elsearch /opt/es/elasticsearch7.14.1/ #4.给elsearch用户授予es根目录的管理权限
chown -R elsearch:elsearch /usr/local/elasticsearch/data/ #5.给elsearch用户授予es的存储数据目录的管理权限
chown -R elsearch:elsearch /usr/local/elasticsearch/logs/ #6.给elsearch用户授予es的存储日志目录的管理权限
复制代码
授权完成后,就可以以 elsearch 用户分别启动 es 集群了
su elsearch #1.切换到elsearch用户
bin/elsticsearch -d #2.后台启动es
复制代码
分别启动各个 es 节点后,可以在当前终端查看相应进程,也可以通过 es 的心跳接口查看, 或者通过 head 或者其他 es 管理客户端来查看运行情况,
至此,es 的配置就基本完成了.
3.2 Kibana 配置
配置好 es 集群和,Kibana 的配置就十分简单了,官方配置地址:https://www.elastic.co/guide/en/kibana/7.14/index.html
server.port: 5601 #端口号,建议保持5601的默认配置,依旧是为了高辨识度
server.host: "10.185.1.178" #要暴露的ip地址
server.publicBaseUrl: "http://10.185.1.178:5601" #默认访问地址,如果挂了域名指向,这里可以写域名地址
elasticsearch.hosts: ["http://10.185.1.178:9200"] #es集群地址,我这暂时就写了一个
i18n.locale: "zh-CN" #kibana的默认语言配置,默认是英文,我这里改成了中文,英文好的同学可以忽略
复制代码
7.x 版本的 es 同样是不建议使用 root 用户启动,所以还是按照给 es 目录授权的步骤,给 Kibana 目录也进行一下普通用户的授权
su root #1.如果当前不是root用户,就先切回到root用户,区分标志就是看命令输入行是$符号还是#符号,#就是root
chown -R elsearch:elsearch /opt/es/kibana/ #2.给elsearch用户授权管理kibana目录
su elsearch #3.切换用户
nohup /opt/es/kibana/bin/kibana & #4.后台启动kibana
复制代码
启动后,就可以在本地浏览器打开 kibana 管理界面了
3.3 Logstash 配置
logstash 主要是做数据传输管道的,这个没有用户限制,配置也是按需进行,比如我们的业务是用 logstash 来传输日志到 es 进行集中管理。所以我的配置文件就长这样
input {
redis {
codec => plain
host => "10.185.1.176"
port => 6379
password => "不给看,按需配置"
data_type => list
key => "eslog"
db => 7
}
}
filter {
# grok是logstash自带的数据解析插件,我这里用的是正则匹配,注意这里配置好的格式,要和代码里传输日志内容的格式一致
grok {
match=>{"message"=>"%{DATA:system} %{DATA:level} %{DATA:time} %{DATA:user} %{DATA:method} %{DATA:path} \"%{DATA:param}\" %{DATA:ip} %{DATA:webbrower} \"%{DATA:remark}\"" }
remove_field => ["message"]
}
geoip {
source => "ip" #启用自带的geoip插件,定位ip地址,按需启用,不用就去掉
}
}
output {
elasticsearch {
hosts => ["http://10.185.1.176:9200"]
index => "cloudlog-%{+YYYY.MM.dd}"
}
}
复制代码
这个就不多说了,之前写过一篇相关的同步的内容:https://www.tonydf.top/2021/08/17/%E6%97%A5%E5%BF%97%E5%BD%92%E4%B8%80%E7%AE%A1%E7%90%86%E7%9A%84%E4%B8%80%E7%A7%8D%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/
配置好后,启动 logstash 即可。
至此,在 CentOS7 环境下 elk 的基本配置就完成了。
评论