ELK平台的部署实践

ELK平台的部署实践

近期做了个日志平台项目,主要基于Elastic Stack 的ELK技术做日志的收集、过滤、存储等,现对相关部署操作及有关脚本做汇总整理,形成部署文档,以便自己更系统的掌握 ,也希望自己的总结能对读者有一定参考意义。

部署步骤

1、安装包准备
2、机器资源准备
3、部署
4、补充配置

一、安装包准备

关于版本的选择,在5月底项目调研时,elk 最新版已有7.x 和8.x版本。 考虑到8.x版本的特性变化比较多,且8版本的JDK要求是17以上,因此项目上决定先用7.17.9版本,方便后续技术维护。

由于部署环境在内网环境,需要从elastic官网下载相关安装包和docker镜像同步到内网
https://www.elastic.co/cn/downloads/
https://www.docker.elastic.co/

http://xxx/elasticstack/7.x/yum/7.17.9/elasticsearch-7.17.9-x86_64.rpm
http://xxx/elasticstack/7.x/yum/7.17.9/kibana-7.17.9-x86_64.rpm

docker镜像:
xxx/docker.io/elastic/logstash:7.17.9
xxx/docker.io/elastic/filebeat:7.17.9

二、机器资源准备

xxx.165 \  xxx.169  \ xxx.204 

规划:

xxx.165 :
  elasticsearch.node-1 
  metricbeat

xxx.169 :
 elasticsearch.node-2 
 kibana
 metricbeat

xxx.204 :
  elasticsearch.node-3 
  metricbeat

k8s:    应用服务是以Pod的形式运行在k8s环境,所以采集端也放在k8s上
   以DaemonSet 方式部署 filebeat  
   以Deployment 方式部署 logstash  

三、部署

1、elasticsearch部署

(1) 、说明

基于rpm方式部署安装包,可以简化部署过程 , es 启动会议elasticsearch 用户来启动es服务 ,所以需要把相关的数据目录、新增的配置文件给elasticsearch用户添加权限,可以用chown 命令修改文件的归属, 不修改时会造成启动异常。

(2) 、下载安装
wget http://xxx/elasticstack/7.x/yum/7.17.9/elasticsearch-7.17.9-x86_64.rpm
## 安装
rpm --install elasticsearch-7.17.9-x86_64.rpm
# 安装后配置文件及程序文件分别在如下目录
/etc/elasticsearch    /usr/share/elasticsearch 
(3) 、创建数据和日志文件夹
 mkdir -p  /data/elasticsearch/data
 mkdir -p  /data/elasticsearch/logs
## 授权   必须要修改
chown -R elasticsearch:elasticsearch /data/elasticsearch/
(4) 、修改elasticsearch.yml 配置
cluster.name: log-es  
node.name: "node-1"  
path.data: /data/elasticsearch/data  
path.logs: /data/elasticsearch/logs  
bootstrap.memory_lock: false  
# 修改绑定的ip(默认只允许本机访问,修改为0.0.0.0后则可以远程访问)  
network.host: xxx.165
http.port: 9200  
discovery.seed_hosts: ["xxx.165", "xxx.169", "xxx.204"]  
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
(5) 、修改 jvm.options 关联配置
# 新增 heap.options 添加参数  , 可以添加此配置文件,也可直接修改jvm.options 文件
vim /etc/elasticsearch/jvm.options.d/heap.options 
-Xms6g  
-Xmx6g
输入参数后保存
chown -R elasticsearch:elasticsearch heap.options 
(6)、 java 环境变量配置

(默认无jdk时会从es的附带目录中加载)

vim /etc/profile 
在末尾添加配置
  #set java environment  
  JAVA_HOME=/usr/share/elasticsearch/jdk  
  ES_JAVA_HOME=$JAVA_HOME  
  PATH=$JAVA_HOME/bin:$PATH  
  export JAVA_HOME ES_JAVA_HOME PATH
  
####  保存后,执行如下命令使之生效
source /etc/profile 
(7) 、启动
# 启动
systemctl start elasticsearch.service  
# 查看状态
systemctl status elasticsearch.service  
(8)、检查
 curl http://xxx.165:9200/
 或者在浏览器中访问查看 
(9)、添加到自启动
systemctl daemon-reload
systemctl enable elasticsearch.service

2、部署另外节点es

主要步骤基本相同,步骤4中的配置文件略有差异 ,配置如下:

cluster.name: log-es  
node.name: "node-2"  
path.data: /data/elasticsearch/data  
path.logs: /data/elasticsearch/logs  
bootstrap.memory_lock: false  
# 修改绑定的ip(默认只允许本机访问,修改为0.0.0.0后则可以远程访问)  
network.host: xxx.169
http.port: 9200  
discovery.seed_hosts: ["xxx.165", "xxx.169", "xxx.204"]  
cluster.initial_master_nodes: ["node-1","node-2","node-3"]

3、部署Kibana

(1)、 下载安装
wget http://xxx/elasticstack/7.x/yum/7.17.9/kibana-7.17.9-x86_64.rpm
## 安装
rpm --install kibana-7.17.9-x86_64.rpm
## 配置文件及程序在
/etc/kibana   /usr/share/kibana

(2)、 修改配置 kibana.yml
server.port: 5601  
server.host: "xxx.169"  
server.publicBaseUrl: "http://xxx.169:5601" 
# es 的svc 地址, cluster-ip:port , 集群内使用  
elasticsearch.hosts: ["http://xxx.169:9200" ,"http://xxx.165:9200","http://xxx.204:9200" ] 
kibana.index: ".kibana"
(3)、 启动
# 启动
systemctl start kibana.service  
# 查看状态
systemctl status kibana.service  
(4)、 检查

在浏览器访问 http://xxx.169:5601

4、部署logstash

在k8s环境中部署时,为了后续更好的管理logstash 和 filebeat 服务 , 创建elk的命名空间:
kubectl create namespace elk

在k8s环境部署logstash用于日志的汇集和过滤,之后再上报给ES进行存储。

(1)、本地准备好部署脚本

配置好关联的ES服务地址、索引命名
logstash-conf-json.yaml
logstash.yml.config.yaml
logstash-deployment.yaml
logstash-svc.yaml
在这里插入图片描述
logstash默认处理流水线的线程数workers 是1, 增大此配置可以提高数据处理速度。
在这里插入图片描述
logstash.conf 中主要配置处理日志的流水线 input \filter \ output , 因为是用filebeat 采集日志给logstash , 所以input 配置beats 及对应端口, filter 中主要需要对日志中数据做处理,有一些字段消除、时间转换、加信息、加时间戳等 、output 中配置es服务地址,及索引名称规则等

在这里插入图片描述
JVM 配置可以按照项目情况进行调整, 默认的JVM 参数是 Xms1g Xms1g , 我实际运行时新生代大约只有83M, 并不是常规的新老1:2 , 造成YGC的次数会比较多,因此手动加了JVM 配置。

(2)、连接对应k8s环境执行脚本
kubectl apply -f  logstash.yml.config.yaml
kubectl apply -f  logstash-conf-json.yaml
kubectl apply -f logstash-deployment.yaml  
kubectl apply -f logstash-svc.yaml
(3)、 检查服务

用步骤2中得到的logstash的service的ip地址,执行curl检测端口
在这里插入图片描述

5、filebeat-采集宿主机-部署

(1)、本地准备好部署脚本

配置好关联的上报logstash地址,及采集的日志源地址
filebeat-config.yaml
filebeat-daemonSet.yaml
在这里插入图片描述
inputs 中配置日志来源, 可以设置1小时以上无变动的文件不采集 ignore_older , processors 中添加处理程序,如添加host的元信息、删除无效字段 ;output 配置logstash 的service clusterIp ; logging中配置filebeat的日志数据,日志中会记录采集的日志的offset信息,就是记录采集的日志到了多少的位置信息, 日志如果被删除,则可能造成日志的重复采集 。
在这里插入图片描述
部署文件中主要做好配置文件挂载(mount 关联)、日志文件挂载,

(2)、连接对应k8s环境执行脚本
kubectl apply -f filebeat-config.yaml  
kubectl apply -f filebeat-daemonSet.yaml
(3)、 检查服务

在这里插入图片描述
通过kubectl logs -f -n elk filebeat-vm4b6 查看日志, 看有无报错 。

(4)、确认数据是否上报到了ES

在这里插入图片描述
在kibana中查看日志数据需要先配置索引模板 ,参见第四节配置中的索引模板配置

6、filebeat-采集k8s的pod-部署

(1)、本地准备好部署脚本

采集k8s关联的pod日志,需要配置账号ServiceAccount ,设置角色并进行绑定,另外采集日志需要注意对应日志目录的挂载,以及需要详细的查看日志的实际目录地址,配置好关联的上报logstash地址,及采集的日志过滤规则等

    # 这三个角色创建文件,可以从filebeat 的git 源码中找到,
    filebeat-service-account.yaml  
    filebeat-role.yaml  
    filebeat-role-binding.yaml  
    
    filebeat-config.yaml
    filebeat-daemonSet.yaml

filebeat-input-containers
从容器日志中采集日志数据, 进行一些处理如获得label信息、pod名称等

(2)、连接对应k8s环境执行脚本
kubectl apply -f filebeat-service-account.yaml  
kubectl apply -f filebeat-role.yaml  
kubectl apply -f filebeat-role-binding.yaml  

kubectl apply -f filebeat-config.yaml  
kubectl apply -f filebeat-daemonSet.yaml
(3)、 检查服务

可参考上一类filebeat的检查

四、补充配置

1、安全配置

安全模式是为了增强生成环境安全性,可依据情况进行选择性的配置,如需启用可按下面步骤设置,需要先停止ES和kibana服务 ,并选择一个ES节点将配置文件修改以便将ES设置为单节点模式

cluster.name: log-es  
node.name: "node-1"  
path.data: /data/elasticsearch/data  
path.logs: /data/elasticsearch/logs  
bootstrap.memory_lock: false  
#network.host: xxx.165  
http.port: 9200  
discovery.type: single-node
#cluster.initial_master_nodes: ["node-1"]

xpack.security.enabled: true
#xpack.security.transport.ssl.enabled: true
#xpack.security.transport.ssl.verification_mode: certificate
#xpack.security.transport.ssl.client_authentication: required
#xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
#xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
(1)、设置密码

在配置文件打开 xpack.security.enabled 标签, 然后启动ES ,输入下面的命令生产密码并保存密码

# 自动生成密码方式
./bin/elasticsearch-setup-passwords auto 
# 手动输入设置密码
./bin/elasticsearch-setup-passwords interactive
(2)、配置证书文件
./bin/elasticsearch-certutil ca
#设置elastic-stack-ca.p12文件的保存路径,并设置密码 
# 下一步
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
# 输入之前的证书密码 ,设置 elastic-certificates.p12文件的保存路径,并设置密码

将两个证书文件 移动到 es 配置文件路径下,最好和elasticsearch.yml路径一直 , 如 /etc/elasticsearch/ ,将配置文件中xpack.security.transport.ssl参数解除注释,确保证书路径是正确的 , 如果证书生成过程生成了密码,则需要通过下面命令将密码输入到es中:

 # 修改文件权限 
chown -R elasticsearch:elasticsearch /etc/elasticsearch/elastic-*.p12
# 写入密码
./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
 
./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

配置完成后重新启动ES服务, 进行检查,正常运行后,可将ES 模式修改为集群模式, 复制elastic-certificates.p12证书文件到集群其他节点, 将其他节点的配置文件添加相应安全参数,进行重启即可。

(3)、kibana配置访问账户
# kibana.yml 中添加用户配置 
elasticsearch.username: "kibana_system"
# 设置密码
./bin/kibana-keystore add elasticsearch.password

设置完成后,重新启动即可。

(4)、logstash配置访问账户

在logstash.yml 文件和 logstash.conf 文件都需要增加账户配置

logstash.conf:
    output {  
   	elasticsearch {  
   		user => logstash_syslog  
   		password => "xxxxx"  
   	}  
   }

logstash.yml:
   xpack.monitoring.enabled: true  
   xpack.monitoring.elasticsearch.username: logstash_syslog  
   xpack.monitoring.elasticsearch.password: xxxxxxx

2、索引模式配置

在这里插入图片描述

在Stack Management ==> Kibana ==> Index Patterns 功能页中进行设置 ,选择 Create index pattern 进行索引文件模式创建 , 将同一类的索引数据聚集到一起方便查询搜索。

3、metricbeat 部署

(1)、下载安装
 wget http://xxx/elasticstack/7.x/yum/7.17.9/metricbeat-7.17.9-x86_64.rpm 
 rpm --install metricbeat-7.17.9-x86_64.rpm 
(2)、启用system 和 elasticssearch-xpach 模块

metricbeat modules enable system
metricbeat modules enable elasticsearch-xpach

(3)、配置

metricbeat.yml
填写 setup.kibana \ output.elasticsearch 的参数地址
module.d/elasticsearch-xpack.yml 修改es 地址

(4)、 执行 setup 导入kibana 可视化面板

metricbeat setup [–dashboard system ]

(5)、启动

systemctl start metricbeat.service

(6)、查看是否有数据

检查是否有metricbeat- 开头的索引, 以及对应索引模板 、索引生命周期等
建立 metricbeat-* kibana Patterns (索引模式)

(7)、监控查看

在可观测性-概览 中查看监控数据
metricbeat监控

在Analytics - 仪表板中 --> Metricbeat System Overview ECS 查看机器的监控信息
在堆栈监控中-查看ES集群的数据

metricbeat监控-es情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值