Janrs.com | 杨建勇
Janrs.com | 杨建勇

Docker 部署 ELK 并设置安全访问

Docker 部署 ELK 并设置安全访问

转载请注明来源:https://janrs.com/c9rq


下载

 docker pull logstash:8.7.0 && \
 docker pull kibana:8.7.0 && \
 docker pull elasticsearch:8.7.0

获取配置以及证书

修改系统参数

打开系统参数配置文件

vi /etc/sysctl.conf

末尾添加以下配置后重启系统

vm.max_map_count=655360

创建目录

mkdir -p /opt/elk
cd /opt/elk
mkdir -p elasticsearch/plugins
mkdir -p elasticsearch/data
mkdir -p elasticsearch/config/certs
mkdir -p kibana
mkdir -p logstash
chmod -R 777 ./*

获取 elasticsearch.yml 配置文件

docker run --name elasticsearch  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "xpack.security.enabled=false" -d elasticsearch:8.7.0 && \
docker cp elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml /opt/elk/elasticsearch/

获取 kibana.yml 配置文件

docker run --name kibana -p 5601:5601 -d kibana:8.7.0 && \
docker cp kibana:/usr/share/kibana/config/kibana.yml /opt/elk/kibana/

创建 logstash.conf 配置文件

下面的密码后面还需要重新修改并重启

cat > /opt/elk/logstash/logstash.conf <<EOF
input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4560
    codec => json_lines
  }
}
output {
  elasticsearch {
    hosts => "es:9200"
    index => "logstash-%{+YYYY.MM.dd}"
  }
}
EOF

创建 elasticsearch 证书

进入容器创建然后导出

docker exec -it elasticsearch /bin/bash

创建 ca 证书

cd /usr/share/elasticsearch && \
bin/elasticsearch-certutil ca

创建 ssl 证书

bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

退出容器

exit

复制容器里面的证书

docker cp elasticsearch:/usr/share/elasticsearch/elastic-certificates.p12 /opt/elk/elasticsearch/config/certs && \
chmod 777 /opt/elk/elasticsearch/config/certs/elastic-certificates.p12

修改配置文件

删除容器

删除前面复制启动的临时容器

docker stop elasticsearch && docker rm elasticsearch && \
docker stop kibana && docker rm kibana

修改 elasticsearch.yaml 为以下配置

# 集群名称
discovery.type: single-node
cluster.name: "elasticsearch"
network.host: 0.0.0.0
http.port: 9200

xpack.license.self_generated.type: basic
xpack.monitoring.collection.enabled: false

# 开启es跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,Content-Type

# 开启安全控制
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

# 传输层通信:传输协议用于Elasticsearch节点之间的内部通信
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12

# HTTP层通信:客户端到Elasticsearch集群的通信
# 如果不开启客户端ssl认证,以下配置注释掉
#xpack.security.authc.api_key.enabled: true
#xpack.security.http.ssl.enabled: true
#xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12
#xpack.security.http.ssl.truststore.path: certs/elastic-certificates.p12
#xpack.security.http.ssl.verification_mode: certificate

修改 kibana.yaml 为以下配置

server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: [ "http://192.168.1.177:9200" ] # 修改为自己的ip
server.publicBaseUrl: http://your-domain.com:5601 # 修改为你自己的域名
monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.username: "elastic"  # es账号
elasticsearch.password: "1234"   # es密码。账号密码这里先设置,后面启动 elk 还要再修改
i18n.locale: zh-CN # 中文
xpack.security.encryptionKey: "4297f44b13955235245b2497399d7a93"
xpack.reporting.encryptionKey: "4297f44b13955235245b2497399d7a93"

部署 ELK

创建 docker-compose.yaml

cat > /opt/elk/docker-compose.yml <<EOF
version: '3'
services:
  elasticsearch:
    image: elasticsearch:8.7.0  #镜像
    container_name: elasticsearch  #定义容器名称
    restart: always  #开机启动,失败也会一直重启
    environment:
      - "ES_JAVA_OPTS=-Xms2048m -Xmx2048m"
      - TZ=Asia/Shanghai
    volumes:
      - /opt/elk/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 配置文件挂载
      - /opt/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
      - /opt/elk/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载
      - /opt/elk/elasticsearch/config/certs:/usr/share/elasticsearch/config/certs #配置文件挂载
    ports:
      - 9200:9200
      - 9300:9300
  kibana:
    image: kibana:8.7.0
    container_name: kibana
    restart: always
    volumes:
        - /opt/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    ports:
      - 5601:5601
  logstash:
    image: logstash:8.7.0
    container_name: logstash
    restart: always
    volumes:
      - /opt/elk/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf #挂载logstash的配置文件
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    links:
      - elasticsearch:es #可以用es这个域名访问elasticsearch服务
    ports:
      - 4560:4560
EOF

部署

创建文件后进入文件夹启动服务

cd /opt/elk && \
docker-compose up -d

创建密码

进入 elasticsearch 容器

docker exec -it elasticsearch /bin/bash

执行以下命令自动创建密码。密码创建后保存。

bin/elasticsearch-setup-passwords auto

修改密码

修改 kibana.yml 访问 elasticsearch 的账号密码

vim /opt/elk/kibana/kibana.yml

修改账号密码为:kibana 以及对应的密码。

重启

修改密码后重启

docker-compose restart

安装 APM

安装 APM 服务使用官方默认推荐的方式,也就是先安装 Fleet 服务器,再安装 APM 服务。

操作很简单,直接在 Kibana 上操作就可以。主要步骤为:

  • 先安装 Fleet 服务器
  • 再安装 APM 服务。安装 APM 服务选择的策略为 Fleet 的策略即可

转载请注明来源:https://janrs.com/c9rq

如果你有任何问题,欢迎在底部留言。或者点击加入微信技术交流群 | 我的GitHub

码仔

文章作者

Janrs.com

发表回复

textsms
account_circle
email

Janrs.com | 杨建勇

Docker 部署 ELK 并设置安全访问
Docker 部署 ELK 并设置安全访问 转载请注明来源:https://janrs.com/c9rq 下载 docker pull logstash:8.7.0 && \ docker pull kibana:8.7.0 && \ docker pull ela…
扫描二维码继续阅读
2023-03-01