日志数据的加密传输,在生产环境中绝不是一个可有可无的选项。在CentOS上用Filebeat向Elasticsearch安全地发送日志,其实有一套非常成熟的套路。下面把整个流程拆开来过一遍。
1. 安装Filebeat
先把Filebeat装上再说。CentOS下直接一条yum命令就能搞定:
sudo yum install filebeat
装完之后别急着跑,配置才是重头戏。
2. 配置Filebeat
配置文件是/etc/filebeat/filebeat.yml,所有核心逻辑都写在这里。加密传输的关键,在于输出段落的SSL/TLS参数。
2.1 配置输出到Elasticsearch
假设你已经有一个Elasticsearch集群在跑,并且启用了HTTPS。那么Filebeat的输出部分要写成这样:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
output.elasticsearch:
hosts: ["https://your-elasticsearch-host:9200"]
ssl.verification_mode: certificate
ssl.certificate_authorities: ["/etc/filebeat/certs/ca.crt"]
ssl.certificate: "/etc/filebeat/certs/client.crt"
ssl.key: "/etc/filebeat/certs/client.key"
这里的ssl.verification_mode设为certificate是常用做法,它会校验服务端证书,但不是强制双向验证。如果你的环境要求更严格,可以调成full。
2.2 配置证书
证书是加密的基石。这里用自签名证书演示,但生产环境建议用正规CA签发的证书。总共分两步:生成CA证书,再签发客户端证书。
生成CA证书
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/filebeat/certs/ca.key -out /etc/filebeat/certs/ca.crt -subj "/C=US/ST=YourState/L=YourCity/O=YourOrganization/CN=YourCA"
注意把-subj里面的参数换成你真实的信息,否则后面校验可能会因为证书信息不匹配而报错。
生成客户端证书
sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/filebeat/certs/client.key -out /etc/filebeat/certs/client.csr -subj "/C=US/ST=YourState/L=YourCity/O=YourOrganization/CN=client"
sudo openssl x509 -req -in /etc/filebeat/certs/client.csr -CA /etc/filebeat/certs/ca.crt -CAkey /etc/filebeat/certs/ca.key -CAcreateserial -out /etc/filebeat/certs/client.crt -days 365
这两条命令干的事儿:先生成证书签名请求,再用CA根证书签字,最终得到客户端证书client.crt。记得把证书文件放到/etc/filebeat/certs/目录下,权限别搞错。
重启Filebeat
配置和证书都到位之后,重启Filebeat让配置生效:
sudo systemctl restart filebeat
最简单的方法,跑一下sudo systemctl status filebeat,看看有没有启动异常。
3. 验证加密传输
配置完了总得确认一下是不是真的在加密跑。可以从两个维度入手:
3.1 检查Elasticsearch日志
去Elasticsearch的日志目录(通常是/var/log/elasticsearch/)搜一下SSL或TLS关键词。如果看到类似SSL handshake completed或successfully authenticated的消息,说明握手成功。如果出现证书错误或拒绝连接,那是证书或路径有问题。
3.2 使用Kibana检查日志
如果你的Kibana也配了SSL,记得在Kibana的配置文件里加上对应的证书信任设置,否则Kibana那边会连不上。Kibana能正常展示Filebeat送过来的数据,就说明整条链路已经跑通了。
4. 其他注意事项
最后说几个容易翻车的点:
- Filebeat到Elasticsearch之间的网络最好走内网或翻跟斗,SSL只解决了加密问题,不能替代网络隔离。
- 证书有效期通常只有一年,务必在到期前更新。可以写个定时任务来检查证书剩余天数,或者直接上自动续签机制。
- 自签名证书的情况下,所有客户端(Filebeat、Kibana等)都要信任这个CA根证书。如果漏掉某一步,就会报
x509: certificate signed by unknown authority。
搞定以上几步,CentOS上Filebeat的加密日志传输就通顺了。
