Loading... # Elasticsearch-ELK(一) ## 什么是ELK? - E: Elasticsearch-数据存储、分析 - L: LogStash-日志采集 - K: Kibana-日志展示 ## 为什么用ELK 普通日志的缺点: - 开发人员不能登录生产服务器查看日志 - 一个应用可能分布于多台服务器,难以查找 - 同一台服务器可能部署多个应用,日志分散难以管理 - 会产生大量磁盘IO,可能会占用大量磁盘空间,严重时可能会造成节点宕机 - 查询速度慢,不支持日志分析 ## ES集群搭建 ### 基于OS #### 配置 1. Cluster: - cluster.name: 集群名称,集群唯一,其它节点通过cluster.name发现集群。 2. Node: - node.name: 节点名称,其它节点可通过node.name发现节点,默认是机器名。 3. Memory: - bootstrap.memory_lock: true: 禁用swap分区,即使ES内存用完。swap会降低性能,**生产环境必须设置为true**。 4. Network: 1. network.host: 当前节点绑定的ip地址,通常为当前服务器的ip地址。 2. http.port: 当前节点的服务端口号,范围[9200,9300)。 3. transport.port: 当前节点的通讯端口号,范围[9300,9400)。 5. Discovery 1. discovery.seed_hosts: 集群中master的候选节点地址数组,可以配置ip加端口或者节点名称,例如:`discovery.seed.hosts: ["192.168.50.28:9300","192.168.50.29:9300"]` 2. cluster.initial_master_nodes: 集群初始master节点。如: `cluster.initial_master_nodes: {"node-1"}`,集群启动首先会选举node-1为master节点。 6. 跨域: ``` http.cors.enabled: true http.cors.allow-origin: "*" ``` 7. 角色: ``` node.master: true # 当前节点是master的候选节点 node.data: false # 当前节点不是数据节点 ``` 8. 单节点发现: 开发模式,会绕过引导检查,生产环境不能设置单节点发现!`discovery.type=single-node`。 9. Paths: 切忌使用默认位置,当ES升级时会造成数据丢失。当多个节点共享同一台服务器时,不能使用相同路径。 1. path.data: 数据存储路径,多个位置用逗号隔开。 2. path.logs: 日志存储路径。 ### 基于docker #### 拉取镜像 ``` docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.2 ``` #### 启动容器: ``` docker run -d -p 9200:9200 -p 9300:9300 --name es elasticsearch:7.6.2 ``` - -d: 后台启动 - -p: 将容器内端口号映射出来以供外部访问 - --name: 给当前容器起个名字 #### 配置 首次启动肯定启动不起来,因为会触发ES引导检查,导致ES报错。可以设置`-e discovery.type=single-node`启动单机模式,跳过引导检查。 1. docker中network.host和network.publish_host的配置与基于OS的配置有所不同。 2. 在修改ES默认的data和logs路径以前,需要先创建目录并且添加读写权限(容器内部): ``` mkdir -p /var/elasticsearch/logs chmod 777 /var/elasticsearch/logs ``` 3. -e discovery.type=single-node为开发模式的配置,当配置了此项,即表示当前节点为单节点发现,所以生产集群中不能有此项配置。 4. 为了避免当配置文件未正确配置而导致容器无法启动,进而无法修改容器内ES的配置文件,容器第一次启动成功最好把容器内的配置文件拷贝出来,或者在创建容器的时候把目录映射出来,容器具体目录进入容器内部查看。 ``` docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml /opt/es/config # 拷出命令 ``` ``` docker cp /opt/es/config/elasticsearch.yml es:/usr/share/elasticsearch/config # 拷入命令 ``` ``` -v /opt/es/config/:/usr/share/elasticsearch/config/ # 创建时映射 ``` 可以通过`docker ps -a`命令查看所有创建的容器与启动状态。使用`docker logs -f es`来查看具体某个容器的日志-f表示跟随输出滚动。可以使用`docker exec -it es /bin/bash`进入启动中的容器内部,进行修改配置等操作,使用`exit`命令或者Crtl+D,退出。 配置文件示例: ``` cluster.name: "docker-cluster" network.host: 0.0.0.0 node.name: node-1 network.publish_host: 192.168.50.28 path: logs: /var/elasticsearch/logs data: /var/elasticsearch/data bootstrap.memory_lock: true http.port: 9200 transport.port: 9300 discovery.seed_hosts: ["192.168.50.28:9300","192.168.50.29:9300"] cluster.initial_master_nodes: ["node-1"] http.cors.enabled: true http.cors.allow-origin: "*" node.master: true node.data: false ``` 如果开启了`bootstrap.memory_lock`内存锁,需要修改配置: vi /etc/security/limit.conf,最后添加以下内容: ``` * soft nofile 65536 * hard nofile 65536 * soft nproc 32000 * hard nproc 32000 * hard memlock unlimited * soft memlock unlimited ``` vi /etc/systemd/system.conf,将以下内容解开注释,并修改: ``` DefaultLimitNOFILE=65536 DefaultLimitNPROC=32000 DefaultLimitMEMLOCK=infinity ``` 注意,修改操作系统配置需要重启系统才能生效,如果宿主机内存过小,可能导致容器无法启动。开发模式内存建议4G以上,生产建议32G以上。 Last modification:July 28th, 2020 at 11:49 am © 允许规范转载
文章的叙述风格独特,用词精准,让人回味无穷。