热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

efk使用心得之环境部署

efk入门篇(一

前言


因公司开发人员需要查询线上日志的需求,运维搭建了一套elk,在当时很好的满足了开发人员的需求,但随着接入的项目增多,在加上前期使用没有做什么调研与规划,导致后面出现很多诸如 ”命名不规范“ ”索引模式无法匹配“ ”报警错乱“ ”索引分片分配过多“ ”索引删除不了“ 这类问题,依靠着”人工智能“一遍遍的把这类问题 ”修复“ 好,最后因为 logstash 占用的内存实在是太大,严重影响其他业务系统正常运行。而笔者这时候在查阅了一些资料后,发现 filebeat 是被设计用来替换logstash 的轻量级数据采集器。经过一番了解后,笔者决定自行搭建一套efk,并遵循业界最佳实践,提供统一的规范,统一的管理。让日志管理高大上一把。


环境准备


  1. 服务器


    通过 hyper-v 准备了三台 centos 7,配置1核4g。


  2. efk 版本


    通过官网下载对应的 rpm 包进行安装即可。这里用的均为 7.5.2。


  3. elasticsearch 集群管理工具


    推荐用 cerebro 通过 github 下载最新的 rpm 包安装即可。


安装及配置


1.安装

elasticsearch 分别安装在三台服务器上,部署成冷热架构,一个hot节点,两个warm节点,kibana、filebeat 安装在任意一台服务器上即可。

2.elasticsearch 配置

    # ---------------------------------- Cluster -----------------------------------
    #
    # Use a descriptive name for your cluster:
    #
    cluster.name: my-cluster
    #
    # ------------------------------------ Node ------------------------------------
    #
    # Use a descriptive name for the node:
    #
    node.name: node-1
    node.attr.box_type: hot
    #
    # Add custom attributes to the node:
    #
    #node.attr.rack: r1
    #
    # ----------------------------------- Paths ------------------------------------
    #
    # Path to directory where to store the data (separate multiple locations by comma):
    #
    path.data: var/lib/elasticsearch
    #
    # Path to log files:
    #
    path.logs: var/log/elasticsearch
    #
    # ----------------------------------- Memory -----------------------------------
    #
    # Lock the memory on startup:
    #
    bootstrap.memory_lock: true
    #
    # Make sure that the heap size is set to about half the memory available
    # on the system and that the owner of the process is allowed to use this
    # limit.
    #
    # Elasticsearch performs poorly when the system is swapping the memory.
    #
    # ---------------------------------- Network -----------------------------------
    #
    # Set the bind address to a specific IP (IPv4 or IPv6):
    #
    network.host: 192.168.117.227
    #
    # Set a custom port for HTTP:
    #
    http.port: 9200
    #
    # For more information, consult the network module documentation.
    #
    # --------------------------------- Discovery ----------------------------------
    #
    # Pass an initial list of hosts to perform discovery when this node is started:
    # The default list of hosts is ["127.0.0.1", "[::1]"]
    #
    discovery.seed_hosts: ["192.168.117.227","192.168.117.229","192.168.117.58"]
    discovery.zen.minimum_master_nodes: 2
    #
    # Bootstrap the cluster using an initial set of master-eligible nodes:
    #
    cluster.initial_master_nodes: ["node-1","node-2","node-3"]
    #
    # For more information, consult the discovery and cluster formation module documentation.
    #
    # ---------------------------------- Gateway -----------------------------------
    #
    # Block initial recovery after a full cluster restart until N nodes are started:
    #
    gateway.recover_after_nodes: 2
    #
    # For more information, consult the gateway module documentation.
    #
    # ---------------------------------- Various -----------------------------------
    #
    # Require explicit names when deleting indices:
    action.destructive_requires_name: true

    这是其中一台的 elasticsearch.yml 配置,其他两台相似,只有少部分配置项不同,这里不在重复陈述。

    通过如下指令来启动一个 elasticsearch 实例

      systemctl start elasticsearch.service


      3.启动 elasticsearch 后常见错误解决

      使用 root 账号启动报错

        useradd 账号名 -g 组名 -p 密码
        chown -R 账号名:组名

        通过 useradd 创建一个组用户,在利用 chown 指令为特定的文件赋予账号权限

        max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

         
         a.通过如下指令查看

          ulimit -Hnulimit -Sn

           b.修改 /etc/security/limits.conf 文件,增加如下配置,用户退出后重新登录生效

            * soft nofile 65536
            * hard nofile 65536

            max number of threads [3818] for user [es] is too low, increase to at least[4096]

            a.通过如下指令查看

              ulimit -Huulimit -Su

              b.修改 /etc/security/limits.conf 文件,增加如下配置,用户退出后重新登录生效

                * soft nproc 4096
                * hard nproc 4096

                max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]


                a.修改 /etc/sysctl.conf 文件

                  vm.max_map_count=262144

                  b.执行如下命令生效或是重启

                    sysctl -p

                    memory locking requested for elasticsearch process but memory is not locked

                    启用 bootstrap.memory_lock: true

                    a.临时性方案适用于非systemd管理

                      ulimit -l unlimited

                      b.永久性方案修改 /etc/security/limits.conf

                        * soft memlock unlimited
                        hard memlock unlimited

                        这里的*代表的是所有用户名称,可以更换为指定用户名
                        另:这里有个坑就是如果/etc/security/limits.d文件夹下有配置文件,那么会覆盖刚才修改的文件,所以请确保该目录没有其它文件

                        c.修改 /etc/sysctl.conf

                          vm.swappiness=0

                          这个参数的作用是告诉linux内核尽量少的使用swap分区,不等于禁用swap,通过少使用swap来提高性能。

                          d.执行如下命令生效或重启

                            sysctl -p


                            4.kibana、filebeat、cerebro 配置和启动基本不会涉及到什么错误需要解决,且网上参考资料也很多,故这里不在做陈述了。后续这里会结合 elasticsearch 开启 ssl 和 https 后,会在详细介绍下这几个组件如何与之通信。


                            写在最后


                            本篇介绍了 elasticsearch 启动后的一些可能出错问题的解决方法,下一篇将继续介绍下如何为 elasticsearch 开启 ssl 和 https。


                            如有收获,点个在看,诚挚感谢。




                            推荐阅读
                            author-avatar
                            默念我覀想你A_193
                            这个家伙很懒,什么也没留下!
                            PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
                            Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有