
# 部署Filebeat和ELK
#### 部署Filebeat
1. 登录SHUBAO组件所在节点，切换**root**用户。
2. 执行以下命令对filebeat.yml文件进行授权。
   ```
   cd /filebeat
   sudo chown root filebeat.yml
   ```
   
3. 执行以下命令启动Filebeat。
   ```
   docker-compose up -d
   ```
   
 
 #### 部署ELK
1. 登录ELK所部署的服务器，切换**root**用户。
2. 执行以下命令启动ELK。
   ```
   cd /ELK
   docker-compose up -d
   ```
   
3. 执行以下命令，判断ElasticSearch是否启动成功。
   ```
   curl localhost:9200
   ```
   其中9200为[修改ELK配置](https://support.huaweicloud.com/bestpractice-roma/roma_05_0055.html#roma_05_0055__section91294211394)中设置的ElasticSearch对外开放端口号。
   - 如果启动成功，会返回鉴权失败信息"missing authentication credentials for REST request"。
   
   - 如果启动失败，会返回连接拒绝信息"connection refused"。
    
4. 为ElasticSearch设置密码校验。
   1. ElasticSearch成功启动后，执行以下命令进入ElasticSearch容器内部。
      ```
      docker exec -it elasticsearch bash
      ```
      进入容器内部后处于/usr/share/elasticsearch路径下。
      
   
   2. 执行以下命令为ElasticSearch生成节点证书。
      ```
      bin/elasticsearch-certutil ca -out config/elastic-certificates.p12 pass ""
      ```
      若要求输入密码，则输入与[修改ELK配置](https://support.huaweicloud.com/bestpractice-roma/roma_05_0055.html#roma_05_0055__section91294211394)时设置的密码一致。
      
   
   3. 执行以下命令新增用户。
      ```
      bin/elasticsearch-users useradd username
      ```
      其中，**username** 设置为与[修改ELK配置](https://support.huaweicloud.com/bestpractice-roma/roma_05_0055.html#roma_05_0055__section91294211394)时设置的用户名一致。
      在新增用户后，会自动提示设置密码，密码设置为与[修改ELK配置](https://support.huaweicloud.com/bestpractice-roma/roma_05_0055.html#roma_05_0055__section91294211394)时设置的密码一致。
      
   
   4. 执行以下命令为新增的用户授权，用于Logstash和Kibana访问ElasticSearch。
      ```
      bin/elasticsearch-users roles -a superuser username
      bin/elasticsearch-users roles -a kibana_system username
      ```
      其中，**username** 为步骤[4.c]新增的用户。
      
   
   5. 执行以下命令查看用户授权。
      ```
      bin/elasticsearch-users roles -v username
      ```
      其中，**username** 为步骤[4.c]新增的用户。
      - 如果授权正确，则返回如下信息。
        ```
        username: kibana_system,superuser
        ```
        
      
      - 如果授权错误，则执行以下命令删除授权，并重新为该用户授权。
        ```
        bin/elasticsearch-users roles -r auth_name username
        ```
        其中，**auth_name**为查询到授权错误的权限名称。
        
       
   
   6. 执行以下命令退出ElasticSearch容器。
      ```
      exit
      ```
      
   
   7. 执行以下命令验证ElasticSearch用户是否配置正确。
      ```
      curl -X GET "http://localhost:9200" -u username
      ```
      其中，**username** 为步骤[4.c]新增的用户。执行命令后，按提示输入步骤[4.c]设置的密码。
      - 如果配置成功，则返回如下信息。
        ```
        {
          "name" : "xxx",
          "cluster_name" : "elasticsearch",
          "cluster_uuid" : "xxx",
          "version" : {
            "number" : "8.7.1",
            "build_flavor" : "default",
            "build_type" : "docker",
            "build_hash" : "xxx",
            "build_date" : "xxx",
            "build_snapshot" : xxx,
            "lucene_version" : "xxx",
            "minimum_wire_compatibility_version" : "xxx",
            "minimum_index_compatibility_version" : "xxx"
          },
          "tagline" : "You Know, for Search"
        }
        ```
        
      
      - 如果配置失败，则返回如下错误信息。
        ```
        {"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":["Basic realm=\"security\" charset=\"UTF-8\"","ApiKey"]}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":["Basic realm=\"security\" charset=\"UTF-8\"","ApiKey"]}},"status":401}
        ```
        
       
    
5. 执行以下命令修改logstash.conf文件中**user** 和**password** 的值，修改为与步骤[4.c]中设置的用户名密码一致。
   ```
   vim /ELK/logstash/logstash.conf
   ```
   
6. 执行以下命令修改kibana.yml文件中**elasticsearch.username** 和**elasticsearch.password** 的值，修改为与步骤[4.c]中设置的用户名密码一致。
   ```
   vim /ELK/kibana/kibana.yml
   ```
   
7. 执行以下命令重启Logstash和Kibana。
   ```
   docker restart logstash
   docker restart kibana
   ```
   
 
