Elkeid 完整部署

1、单机docker快速部署 (单机测试环境推荐)

注:宿主机请优先使用centos 7.x 或 debian 9/10,容器内的服务依赖了systemd,而systemd使用了cgroup,容器内外systemd版本相差过大会导致容器内的systemd运行异常,无法启动相应服务。

1.1、导入镜像

# 从release下载的是分卷的镜像,需要先合并镜像
wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1/elkeidup_image_v1.9.1.tar.gz.00
wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1/elkeidup_image_v1.9.1.tar.gz.01
wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1/elkeidup_image_v1.9.1.tar.gz.02
wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1/elkeidup_image_v1.9.1.tar.gz.03
cat elkeidup_image_v1.9.1.tar.gz.* > elkeidup_image_v1.9.1.tar.gz

#导入镜像
docker load -i elkeidup_image_v1.9.1.tar.gz

1.2、运行容器

docker run -d --name elkeid_community \
  --restart=unless-stopped \
  -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
  -p 8071:8071 -p 8072:8072 -p 8080:8080 \
  -p 8081:8081 -p 8082:8082 -p 8089:8080  -p 8090:8090\
  --privileged \
  elkeid/all-in-one:v1.9.1

1.3、设置对外IP

使用本机IP,不能使用127.0.0.1。

docker exec -it elkeid_community bash

cd /root/.elkeidup/

# 命令为交互式
./elkeidup public {ip}


./elkeidup agent init
./elkeidup agent build
./elkeidup agent policy create

cat ~/.elkeidup/elkeid_passwd

部署过程中遇到Elkeid社区版信息收集声明,请参考自动下载缺失预编译ko服务开启提示Agent Install Remark

1.4、访问前端console并安装Agent

顺利安装完成后,/root/.elkeidup/elkeid_passwd文件记录了各组件的密码和相关的url。

初始密码在构建镜像的时候已经固定了的,为了安全性请不要用于生产环境

字段说明
elkeid_consoleconsole账号密码
elkeid_hub_frontendhub前端账号密码
grafanagrafana账号密码
grafanagrafana 地址
elkeid_hub_frontendelkeid hub前端地址
elkeid_consoleelkeid console地址
elkeid_service_discovery服务发现地址

访问elkeid_console,按照Console使用手册-安装配置界面的命令进行Agent安装部署。

2、使用elkeidup进行完整部署

2.1、配置目标机器root用户ssh免密登录

如果部署机器为本机,依旧需要配置本机免密登录,登录耗时需要小于1s。 可用以下命令进行验证,两次date命令的输出结果需要相同。

date && ssh root@{ip} date
# 输出时间差小于1s

2.2、解压release产物并配置目录

  • 下载release产物(分卷压缩包),并合并压缩包
wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1/elkeidup_package_v1.9.1.tar.gz.00
wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1/elkeidup_package_v1.9.1.tar.gz.01
wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1/elkeidup_package_v1.9.1.tar.gz.02
cat elkeidup_package_v1.9.1.tar.gz.* > elkeidup_package_v1.9.1.tar.gz

也可以参考从源码构建 Elkeid,自行编译和构建package包。

如果之前安装过,请删除/root/.elkeidup/elkeid文件夹,避免造成干扰

  • 解压release产物并配置目录
mkdir -p /root/.elkeidup && cd /root/.elkeidup
mv {DownloadDir}/elkeidup_package_v1.9.1.tar.gz elkeidup_package_v1.9.1.tar.gz
tar -xf elkeidup_package_v1.9.1.tar.gz
chmod a+x /root/.elkeidup/elkeidup

2.3、生成并修改config.yaml

ip为本机非127.0.0.1 ip,若不为单机部署,请参考资源手册修改config.yaml

cd /root/.elkeidup
./elkeidup init --host {ip}
mv config_example.yaml config.yaml

2.4、部署

cd /root/.elkeidup

# 命令为交互式
./elkeidup deploy

部署过程中遇到Elkeid社区版信息收集声明,请参考自动下载缺失预编译ko服务开启提示Agent Install Remark

2.5、构建Agent

cd /root/.elkeidup

./elkeidup agent init
./elkeidup agent build
./elkeidup agent policy create

2.6、访问前端console并安装Agent

顺利安装完成后,执行cat /root/.elkeidup/elkeid_passwd将看到各组件的随机生成的密码和相关的url。

字段说明
elkeid_consoleconsole账号密码
elkeid_hub_frontendhub前端账号密码
grafanagrafana账号密码
grafanagrafana 地址
elkeid_hub_frontendelkeid hub前端地址
elkeid_consoleelkeid console地址
elkeid_service_discovery服务发现地址

访问elkeid_console,按照Console使用手册-安装配置 界面的命令进行Agent安装部署。

3、Agent Install Remark

  • Driver模块依赖预编译ko,具体支持列表参考:ko_list
  • Driver 是否存在的方式:lsmod | grep hids_driver
    • 如果测试机器kernel版本不在支持列表中,请自行编译ko文件和生成sign文件(sha256),并将其导入Nginx中。
    • 如果在执行elkeidup deploy中未同意声明,也需要自行编译ko或下载Release中对应的预编译ko(支持列表)和sign文件,并将其导入Nginx中。

3.1、ko导入Nginx方法

ko/sign文件的格式应该遵循:hids_driver_1.7.0.4_{uname -r}_{arch}.ko/sign格式, 文件需要放置在nginx对应服务器的:/elkeid/nginx/ElkeidAgent/agent/component/driver/ko下,并修改权限chown -R nginx:nginx /elkeid/nginx。放置完成后,重启Agent即可。

4、HTTPS配置

请参考Elkeid https配置文档

5、 重装指定组件

如果部分组件有更新,或者重新编译了部分组件,可以使用elkeidup reinstall命令重新安装指定组件。

例如 release:v1.9.1.1 中更新了Hub社区版,可以使用以下命令进行重新安装。

# {v1.9.1.1} 为 v1.9.1.1 解压后的package目录
# reinstall hub
cp {v1.9.1.1}/package/hub/hub.tar.gz /root/.elkeidup/package/hub/hub.tar.gz
cp {v1.9.1.1}/package/hub_leader/hub_leader.tar.gz /root/.elkeidup/package/hub_leader/hub_leader.tar.gz

/root/.elkeidup/elkeidup reinstall --component Hub
/root/.elkeidup/elkeidup reinstall --component HubLeader

6、资源占用

该章节仅用于说明如何计算服务端所需资源,因为不同服务器在不同业务和不同负载下产生的事件数量差别很大,不能仅通过agent数进行资源占用评估,推荐配置仅供参考。

6.1 配置计算

以下为需要重点评估的部分,其他部分资源占用相对较少并且非线性增长。

6.1.1 接入带宽

一个8C服务器在中等负载下,单个agent预计为30qps,占用带宽约7KB/S,在kafka上每小时占用磁盘约100MB。

6.1.2 AC

入带宽:所有agent带宽的和,同时需要考虑峰值提供冗余。

出带宽:数据写入到kafka,此部分是未压缩的数据,带宽需求为入带宽的4~6倍,如果超过千兆,需要使用万兆网卡。

CPU&内存:AC单个CPU约可以支撑400~500个agent,30Kqps,cpu内存比例为1:2。

6.1.3 Kafka

入带宽:同AC出带宽

出带宽:若仅用hub消费,则与入带宽相同,否则,每增加一个消费者,出带宽增加一倍。

集群:如果kafka为单节点,可以直接按上述数据计算带宽和磁盘要求,如果为3节点无副本,单台机器带宽需求和磁盘需要变为3分之1。

磁盘:默认仅保持一到两个小时的数据,数据以未压缩的形式保存在kafka的磁盘上,根据数据保存时间计算磁盘容量和冗余。

副本:若配置副本,磁盘需求对应翻倍。

6.1.4 Mongodb

Mongodb集群提供的仅是高可用,单节点与三节点,实际上消耗的均是master节点的资源。

1000以下:独占或等效独占的 4C8G 100G

1000-5000: 独占或等效独占的 8C16G 200G

5000以上:独占或等效独占的 16C32G 500G

6.1.5 Manager

每5000台Agent,提供一个4C8G的manager实例即可。

6.1.6 Hub

在满足通常安全需求时,单个Hub CPU预期支持 100核。但社区版尚未支持hub集群。

6.2 推荐配置

6.1.1 <1000台agent 无高可用

用途配置说明
Storage-18C16G 1TKafka
Storage-28C16G 100GMongodb, Redis
AC-14C8G 100GAgentCenter
HUB-18C16GHub
Other8C16G 100G其他组件:sd,nginx,prometheus等

6.2.2 3000-5000 高可用

用途配置说明
Storage-1/2/38C16G 1TKafka
Storage-4/5/68C16G 100GMongodb, Redis
AC-1/2/34C8G 100GAgentCenter
MG-18C16GManager
HUB-n8C16GHub数量待定
Other8C16G 100G其他组件:sd,nginx,prometheus等