ElasticSearch
一个完整的集中式日志系统, 需要包含以下几个主要特点:
• 收集-能够采集多种来源的日志数据
• 传输-能够稳定的把日志数据传输到中央系统
• 存储-如何存储日志数据
• 分析-可以支持 UI 分析
• 警告-能够提供错误报告, 监控机制(Elastalert)
ELK能够完美的解决上述问题
ELK提供了一整套解决方案, 并且都是开源软件, 之间互相配合使用, 完美衔接, 高效的满足了很多场合的应用,是目前主流的日志系统
ELK由ElasticSearch、Logstash和Kibana三个开源工具组成:
1)ElasticSearch
ElasticSearch是一个基于Lucene的开源分布式搜索服务器
特点:
分布式, 零配置, 自动发现, 索引自动分片, 索引副本机制, restful风格接口, 多数据源, 自动搜索负载等它提供了一个分布式多用户能力的全文搜索引擎, 基于RESTful web接口,Elasticsearch是用Java开发的, 并作为Apache许可条款下的开放源码发布设计用于云计算中, 能够达到实时搜索, 稳定, 可靠, 快速, 安装使用方便
2)Logstash
Logstash是一个完全开源工具, 可以对你的日志进行收集、过滤、分析
一般为c/s架构, client端安装在需要收集日志的主机上, server端负责将收到的各节点日志进行过滤、修改等 *** 作再一并发往elasticsearch上去
3)Kibana
Kibana 是一个基于浏览器页面的Elasticsearch前端展示工具, 也是一个开源和免费的工具
Kibana可以为 ElasticSearch 提供日志分析友好的 Web 界面, 可以帮你汇总、分析和搜索重要数据日志
部署
版本要进行统一
配置java环境
tar -xf jdk-8u181-linux-x64.tar.gz -C /usr/local/ ln -s /usr/local/jdk1.8.0_181/ /usr/local/java vim /etc/profile.d/java.sh . /etc/profile.d/java.sh
解压elasticsearch
tar xf elasticsearch-6.4.1.tar.gz -C /usr/local/ ln -s /usr/local/elasticsearch-6.4.1/ /usr/local/es useradd es #创建es用户 不可使用root运行 chown es.es -R /usr/local/es/ echo "1" |passwd --stdin es
配置文件
cd /usr/local/es/ vim config/elasticsearch.yml cluster.name: es-cluster # 集群名称,各节点配成相同的集群名称 node.name: es1 # 节点名称,各节点配置不同。 node.master: true # 指示某个节点是否符合成为主节点的条件 node.data: true # 指示节点是否为数据节点。数据节点包含并管理索引的一部分 path.data: /data/es/data # 数据存储目录 path.logs: /data/es/logs # 日志存储目录 bootstrap.memory_lock: true # 内存锁定,是否禁用交换 network.host: 0.0.0.0 # 绑定节点IP http.port: 9200 # rest api端口 discovery.zen.ping.unicast.hosts: ["es1", "es2"] # 提供其他 Elasticsearch 服务节点的单点广播发现功能 #bootstrap.system_call_filter 系统调用过滤器。 #discovery.zen.minimum_master_nodes 集群中可工作的具有Master节点资格的最小数量,官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量。 #discovery.zen.ping_timeout 节点在发现过程中的等待时间。 #discovery.zen.fd.ping_retries 节点发现重试次数。 #http.cors.enabled 是否允许跨源 REST 请求,用于允许head插件访问ES。 #http.cors.allow-origin 允许的源地址 配置es-data 在master的基础上作如下修改: node.name: es2 node.master: false node.data: true
启动服务
su - es $ /usr/local/es/bin/elasticsearch -d # 参数 -d 后台运行 #查看端口进行验证是否正常启动: netstat -tnpl tcp6 0 0 :::9200 :::* LISTEN tcp6 0 0 :::9300 :::* LISTEN
查看集群健康状况
curl IP:9200/_cluster/health?pretty { "cluster_name" : "my-es", "status" : "green", "timed_out" : false, "number_of_nodes" : 2, "number_of_data_nodes" : 2, "active_primary_shards" : 0, "active_shards" : 0, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 } • number_of_nodes 和 number_of_data_nodes 这个命名完全是自描述的。 • active_primary_shards 指出你集群中的主分片数量。这是涵盖了所有索引的汇总值。 • active_shards 是涵盖了所有索引的所有分片的汇总值,即包括副本分片。 • relocating_shards 显示当前正在从一个节点迁往其他节点的分片的数量。通常来说应该是0,不过在ES发现集群不太均衡时,该值会上涨。 比如说:添加了一个新节点,或者下线了一个节点。 • initializing_shards 是刚刚创建的分片的个数。比如,当你刚创建第一个索引,分片都会短暂的处于 initializing 状态。 这通常会是一个临时事件,分片不应该长期停留在 initializing 状态。 你还可能在节点刚重启的时候看到 initializing 分片:当分片从磁盘上加载后,它们会从 initializing 状态开始。 • unassigned_shards 是已经在集群状态中存在的分片,但是实际在集群里又找不着。通常未分配分片的来源是未分配的副本。 比如,一个有5分片和1副本的索引,在单节点集群上,就会有5个未分配副本分片。 如果你的集群是 red 状态,也会长期保有未分配分片(因为缺少主分片)。
颜色状态:
green - 所有的主分片和副本分片都正常运行.yellow - 所有的主分片都正常运行,但不是所有的副本分片都正常运行.red - 有主分片没能正常运行. 启动时遇到问题
解决方法: 使用普通用户运行
max number of threads [3818] for user [es] is too low, increase to at least [4096]
解决方法:主机物理内存小于2G,加内存!
问题[1]: 进程最大可同时打开文件数太小,至少要65536
解决方法:
# echo “elk soft nofile 65536” >> /etc/security/limits.conf
# echo “elk hard nofile 65536” >> /etc/security/limits.conf
# su - elk
$ ulimit -n
65536
问题[2]: 请求锁内存失败,系统默认能让进程锁住的最大内存为64k
解决方法:
# echo “elk soft memlock unlimited” >> /etc/security/limits.conf
# echo “elk hard memlock unlimited” >> /etc/security/limits.conf
问题[3]: elk用户拥有的内存权限太小了,至少需要262114
解决方法:
# echo vm.max_map_count=262144 >> /etc/sysctl.conf
# sysctl -p
vm.max_map_count = 262144
需要用到的工具: bzip2 unzip 安装插件包: 插件下载地址: https://github.com/mobz/elasticsearch-head node下载地址: https://npm.taobao.org/mirrors/node/latest-v10.x/node-v10.0.0-linux-x64.tar.gz #node-v10.0.0-linux-x64.tar.gz #elasticsearch-head-master.zip tar xf node-v10.0.0-linux-x64.tar.gz -C /usr/local/ ln -s /usr/local/node-v10.0.0-linux-x64/ /usr/local/node vim /etc/profile.d/node.sh export NODE_HOME=/usr/local/node export NODE_PATH=$NODE_HOME/lib/node_modules export PATH=$NODE_HOME/bin:$PATH . /etc/profile.d/node.sh node -v unzip elasticsearch-head-master.zip -d /usr/local/ npm install -g cnpm --registry=https://registry.npm.taobao.org cnpm install -g grunt-cli cnpm install cd /usr/local/elasticsearch-head-master vim Gruntfile.js connect: { server: { options: { hostname: 'IP', #添加此项 port: 9100, base: '.', keepalive: true } } } grunt server & #挂入后台运行即可 su - es /usr/local/es/bin/elasticsearch 随后浏览器访问http://IP:9100
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)