-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
executable file
·125 lines (117 loc) · 4.74 KB
/
Copy pathdocker-compose.yml
File metadata and controls
executable file
·125 lines (117 loc) · 4.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# ElastiFlow 流量分析栈(Docker Compose v2)
#
# 一键拉起 Elasticsearch + Kibana + ElastiFlow flow-collector。
# 只接收 xdp-sampler 通过 NetFlow v5 推送的采样流量,不替代 xdp-ban 本身。
#
# 启动:
# cd deploy/elastiflow
# docker compose up -d
#
# 停止(保留数据): docker compose down
# 完全清除: docker compose down -v
#
# 是否需要 root / 特权容器:不需要。
# 这三个容器(elasticsearch/kibana/flow-collector)都是普通用户态服务,
# 不碰网卡、不需要 CAP_NET_ADMIN、不需要 --privileged 或 host 网络模式。
# root 权限只有 xdp-sampler(本机进程,不在这个 compose 里)才需要 ——
# 它要 attach XDP 程序到网卡,这是内核操作,Docker 容器管不到。
# 一句话:docker compose 这边全程普通用户跑,sudo 留给 `sudo ./xdp-sampler`。
#
# 就绪后:
# Kibana http://localhost:5601
# NetFlow 入口 udp/2055 ← xdp-sampler -netflow <本机IP>:2055
#
# 注:早期用了顶层 name: 字段给项目命名,但那是 Compose 规范新增、
# 注:顶层 version 字段必不可少 —— 缺了它,docker-compose v1 会退回最古老的
# "v1 文件格式"(整个文件即服务列表,无 services/volumes 层),把 kibana、
# es-data 当成未知配置项报 "Unsupported config option"。
# 用 2.1 而非 2.4 或 3.x:
# - 2.4 需要 docker-compose >= 1.21(2018),太新,老版本不认会回退报错;
# - 3.x 移除了 depends_on 的 condition: service_healthy 长格式(我们要靠它
# 等 ES 健康再起 collector);
# - 2.1 自 docker-compose 1.9(2016)起支持,同时具备 healthcheck +
# condition: service_healthy,是兼容面最广的选择。
version: "2.1"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0
container_name: ef-elasticsearch
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
# 关掉安全:本地评估栈,ES 只在 compose 内网暴露。
# 生产务必打开 xpack.security 并设密码。
- xpack.security.enabled=false
- xpack.security.http.ssl.enabled=false
# 2g 堆内存适合评估;大流量需调高。
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
- cluster.name=xdpban-ef
ulimits:
# memlock 必须解锁,否则 bootstrap.memory_lock=true 启动失败。
# 这是 ES 在容器里最常见的启动错误。Docker 默认按 ulimits 里给的值
# 设置,不需要额外传 --privileged 或修改宿主机 limits.conf。
memlock:
soft: -1
hard: -1
nofile:
soft: 65535
hard: 65535
volumes:
- es-data:/usr/share/elasticsearch/data
ports:
- "127.0.0.1:9200:9200" # 仅绑本机,不对外暴露 ES
healthcheck:
test: ["CMD-SHELL", "curl -sf http://localhost:9200/_cluster/health || exit 1"]
interval: 10s
timeout: 5s
retries: 30
restart: unless-stopped
kibana:
image: docker.elastic.co/kibana/kibana:8.15.0
container_name: ef-kibana
depends_on:
elasticsearch:
condition: service_healthy
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- SERVER_HOST=0.0.0.0
ports:
- "5601:5601"
healthcheck:
test: ["CMD-SHELL", "curl -sf http://localhost:5601/api/status || exit 1"]
interval: 15s
timeout: 5s
retries: 30
restart: unless-stopped
flow-collector:
image: elastiflow/flow-collector:6.4.2
container_name: ef-flow-collector
depends_on:
elasticsearch:
condition: service_healthy
ports:
# NetFlow v5 — xdp-sampler 以此格式推送采样流量。
# UDP 必须显式声明协议,否则默认 TCP 收不到。
- "2055:2055/udp"
environment:
EF_FLOW_SERVER_UDP_IP: "0.0.0.0"
EF_FLOW_SERVER_UDP_PORT: "2055"
EF_PROCESSOR_DECODE_NETFLOW5_ENABLE: "true"
EF_PROCESSOR_DECODE_NETFLOW9_ENABLE: "true"
EF_PROCESSOR_DECODE_IPFIX_ENABLE: "true"
# 信任报文里的 sampling_interval 字段:xdp-sampler 把 1/N 写入每个 v5 包,
# collector 据此把计数 ×N 还原真实流量。关掉会让流量被严重低估。
EF_PROCESSOR_DECODE_NETFLOW_SAMPLING_TRUST: "true"
EF_OUTPUT_ELASTICSEARCH_ENABLE: "true"
EF_OUTPUT_ELASTICSEARCH_ECS_ENABLE: "true"
EF_OUTPUT_ELASTICSEARCH_ADDRESSES: "elasticsearch:9200"
EF_OUTPUT_ELASTICSEARCH_INDEX_PERIOD: "daily"
# GeoIP / ASN 富化:与 xdp-ban 的按国家/AS 封禁看同一维度,便于对照。
EF_PROCESSOR_ENRICH_IPADDR_MAXMIND_ASN_ENABLE: "true"
EF_PROCESSOR_ENRICH_IPADDR_MAXMIND_GEOIP_ENABLE: "true"
# 6.x 免费版流速约 4000 flows/s,评估足够。
EF_LICENSE_ACCEPTED: "true"
restart: unless-stopped
volumes:
es-data:
driver: local