博客 > 硬件&操作系统&网络&DevOps
特点: - 单结点(E/L/K各一个容器),单主机 - 整个系统只有Kibana的网页端暴露在公网上,其他都在内网。 - Kibana使用https访问网页。Elastic使用账号密码登录,但不是https(因为按官方文档,给Elastic配内部访问的SSL特别麻烦),我觉得只配浏览器端公网访问用的Kibana的https就够了。 - Kibana支持网页端账号密码登录(实际上是与Elastic的账号密码系统完全绑定的,准确说是Elastic使用账号密码访问,Kibana自动侦测到了所以要求在网页上也登陆,而不是在Kibana里直接配) - E/L/K 三个容器都映射出了config文件夹,可以任意改配置不丢失。 - E额外映射了data(数据不能丢)和plugins(为了安ik分词器,安分词器就不记录了,直接上github走流程,记得安完要给index或field加analyzer配置才能使用),基本实现全部重要内容的持久化。 - L额外映射了conf文件夹和my-dep文件夹,分别放管道配置和依赖(比如jdbc的架包),由于还映射了config,所以`pipeline.yml`等配置也是可以持久存储的,基本可以实现Logstash的全部配置内容的持久化,可以随便造。 - 他们仨用一个专用网络,通信很方便,也有利于以后扩展。 # 第一步:docker-compose > 博文所有代码内容已脱敏处理,在需要的地方把<尖括号>里的内容替换成自己的,才能跑通。 不多说了,第一步,上 compose: (盗别人的,自己改了点) ```yml version: '2' services: elasticsearch: container_name: elasticsearch image: docker.elastic.co/elasticsearch/elasticsearch:7.17.5 environment: - node.name=elasticsearch - cluster.name=es-docker-cluster - discovery.type=single-node - bootstrap.memory_lock=true - xpack.security.enabled=true - "ES_JAVA_OPTS=-Xms512m -Xmx1024m" ulimits: memlock: soft: -1 hard: -1 volumes: - elasticsearch_data:/usr/share/elasticsearch/data - elasticsearch_config:/usr/share/elasticsearch/config - /root/elasticsearch/plugins:/usr/share/elasticsearch/plugins ports: - 9200:9200 - 9300:9300 networks: - elastic kibana: image: docker.elastic.co/kibana/kibana:7.17.5 container_name: kibana environment: ELASTICSEARCH_URL: http://elasticsearch:9200 ELASTICSEARCH_HOSTS: http://elasticsearch:9200 volumes: - kibana_config:/usr/share/kibana/config - <你的ssl证书路径>:/cert ports: - <你的Kibana公网端口>:5601 networks: - elastic logstash: image: docker.elastic.co/logstash/logstash:7.17.5 container_name: logstash ports: - 5044:5044 volumes: - /root/logstash/pipeline/:/usr/share/logstash/pipeline/:ro - /root/logstash/my-dep/:/usr/share/logstash/my-dep - logstash_config:/usr/share/logstash/config networks: - elastic networks: elastic: driver: bridge ``` # 第二步:配置Elastic用户密码机制 `elasticsearch.yml`: ```yml cluster.name: "docker-cluster" discovery.type: single-node http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-headers: Authorization xpack.security.transport.ssl.verification_mode: none xpack.security.transport.ssl.client_authentication: none network.host: 0.0.0.0 action.auto_create_index: true ``` 配完Elastic,先重启Elastic,然后终端打进容器去(`docker exec`),执行以下命令: ```bash bin/elasticsearch-setup-passwords interactive ``` 然后会让你输入好几个系统用户角色的密码,里面每个密码最好都记住,并且不同,最重要的是一个叫`elastic`的用户,它将自动成为Kibana网页端的管理员。 然后再重启。 # 第三步:配置L/K + 公网HTTPS `logstash.yml`: ```yml http.host: "0.0.0.0" xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ] xpack.monitoring.elasticsearch.username: "elastic" xpack.monitoring.elasticsearch.password: "<你的elastic用户密码>" ``` 当然 Logstash 不加工作流配置的话是跑不起来的,这里不多赘述,有一个好地方可以参考:[Logstash最佳实践](https://doc.yonyoucloud.com/doc/logstash-best-practice-cn/index.html) `kibana.yml`: ```yml server: host: "0.0.0.0" shutdownTimeout: "5s" publicBaseUrl: "<你准备配置的公网URL地址>" ssl: enabled: true key: /cert/<你的SSL证书>.key certificate: /cert/<你的SSL证书>.pem elasticsearch: hosts: [ "http://elasticsearch:9200" ] username: 'elastic' password: '<你的elastic用户密码>' xpack.security.encryptionKey: "something_at_least_32_characters" ``` 最后,全部重启,应该就完成了。`https://你的Kibana公网URL地址`,访问Kibana提示需要输入密码,这时输入用户名elastic,密码就是刚刚设置的密码。 --- 另外如果有其他的`beats`工具(`filebeats`、`metricbeats`),或者`APM`,要链接到Elastic,也都是需要密码的,否则会 HTTP Status 401。如果你觉得不太安全,随时加减用户(在网页端的设置界面)。