本项目使用 Ansible 自动化部署 EFK(Elasticsearch, Filebeat, Kibana)技术栈,包含 Kafka 消息队列和 Elastalert2 告警系统。
ansible-efk/
├── inventory # 主机清单文件
├── ansible.cfg # Ansible 配置文件
├── playbooks/ # Playbook 目录
│ ├── main.yml # 主 Playbook(支持按组件部署)
│ ├── es.yml # Elasticsearch 部署 Playbook
│ ├── kibana.yml # Kibana 部署 Playbook
│ ├── logstash.yml # Logstash 部署 Playbook
│ ├── filebeat.yml # Filebeat 部署 Playbook
│ ├── kafka.yml # Kafka 部署 Playbook
│ └── elastalert2.yml # Elastalert2 部署 Playbook
├── vars/ # 变量文件目录
│ └── efk-all.yml # 全局变量配置
└── roles/ # Ansible 角色目录
├── pre_hosts/ # 主机预配置角色
├── elasticsearch/ # Elasticsearch 角色
├── kibana/ # Kibana 角色
├── logstash/ # Logstash 角色
├── filebeat/ # Filebeat 角色
├── kafka/ # Kafka 角色
└── elastalert2/ # Elastalert2 角色
- Elasticsearch: 8.15.0
- Kibana: 8.15.0
- Logstash: 8.15.0
- Filebeat: 8.15.0
- Kafka: 3.8.0
- JDK: 17.0.12
- Elastalert2: latest
编辑 inventory 文件,配置目标主机:
[es-all]
elasticsearch1 ansible_host=192.168.1.10
elasticsearch2 ansible_host=192.168.1.11
[kibana]
kibana1 ansible_host=192.168.1.12
[logstash]
logstash1 ansible_host=192.168.1.13
[filebeat]
filebeat1 ansible_host=192.168.1.14
[kafka-all]
kafka1 ansible_host=192.168.1.15
[elastalert2]
elastalert1 ansible_host=192.168.1.16编辑 ansible.cfg 文件,根据实际环境调整配置:
[defaults]
inventory = inventory
remote_user = your_username
private_key_file = ~/.ssh/id_rsa
host_key_checking = False编辑 vars/efk-all.yml 文件,根据实际环境修改配置:
ansible_remote_user: your_username
elasticsearch_cluster_name: "your-cluster"
# ... 其他配置ansible-playbook -i inventory playbooks/main.yml --tags efk-all# 仅部署 Elasticsearch
ansible-playbook -i inventory playbooks/main.yml --tags elasticsearch
# 仅部署 Kibana
ansible-playbook -i inventory playbooks/main.yml --tags kibana
# 仅部署 Logstash
ansible-playbook -i inventory playbooks/main.yml --tags logstash
# 仅部署 Filebeat
ansible-playbook -i inventory playbooks/main.yml --tags filebeat
# 仅部署 Kafka
ansible-playbook -i inventory playbooks/main.yml --tags kafka
# 仅部署 Elastalert2
ansible-playbook -i inventory playbooks/main.yml --tags elastalert2如需使用代理,取消注释 vars/efk-all.yml 中的代理配置:
http_proxy: http://127.0.0.1:1088
https_proxy: http://127.0.0.1:1088
no_proxy: localhost,127.0.0.1,localaddress,localdomain.com各组件 JVM 内存配置可在 vars/efk-all.yml 中调整:
elasticsearch_jvm_xms: "-Xms8g"
elasticsearch_jvm_xmx: "-Xmx8g"
logstash_jvm_xms: "-Xms8g"
logstash_jvm_xmx: "-Xmx8g"
kafka_java_heap: -Xms8g -Xmx8gElasticsearch 存储配置:
elasticsearch_storage_method: "disk"
elasticsearch_storage_location: "/dev/vdb"
elasticsearch_data_dir: "/opt/elasticsearch-8.15.0/data"- Elasticsearch TLS 证书密码配置
- 各组件用户认证配置
- 建议在生产环境中修改默认密码
- 连接问题:检查 SSH 密钥配置和网络连通性
- 权限问题:确保远程用户具有 sudo 权限
- 资源不足:调整 JVM 内存配置以适应服务器资源
本项目基于 MIT 许可证开源。