1、ELK 日志分析系统1、ELK 日志分析系统介绍1.1 传统的日志统计及分析方式日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的 syslog,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用gre
2、p、awk 和 wc 等 Linux 命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。1.2 ELK 介绍开源实时日志分析 ELK 平台能够完美的解决我们上述的问题,ELK 由ElasticSearch、Logstash 和 Kiabana 三个开源工具组成。(1)、Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。(2)、Logstash 是一个完全开源的工具,可以对日志进行收集、过滤,并将其存储供以后使用(
3、如:搜索)。(3)、Kibana 也是一个开源和免费的可视化工具,可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。1.2.1 Elasticsearch 介绍Elasticsearch 是一个基于 Apache Lucene(TM)的开源搜索引擎,Lucene 是当前行业内最先进、性能最好的、功能最全的搜索引擎库。但 Lucene 只是一个库。无法直接使用,必须使用 Java 作为开发语言并将其直接集成到应用中才可以使用,而且 Lucene 非常复杂,需要提前深入了解检索的相关知识才能理解它是如何工作的。Ela
4、sticsearch 也使用 Java 开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。但 Elasticsearch 不仅仅值是 Lucene 库和全文搜索,它还有以下用途: 分布式的实时文件存储,每个字段都被索引并可被搜索 分布式的实时分析搜索引擎 可以扩展到上百台服务器,处理 PB 级结构化或非结构化数据1.2.2 Elasticsearch 基础概念Elasticsearch 有几个核心概念。从一开始理解这些概念会对整个学习过程有莫大的帮助。(1)、接近实时(NRT
5、)Elasticsearch 是一个接近实时的搜索平台。意味着检索一个文档直到这个文档能够被检索到有一个轻短暂的延迟(通常是 1 秒)。(2)、集群(cluster)集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能。集群由一个唯一的名字标识,这个名字默认就是“elasticsearch”。这个名字很重要,因为一个节点只能通过指定某个集群的名字,来加入这个集群。在产品环境中显式地设定这个名字是一个好习惯,但是使用默认值来进行测试/ 开发也可以。(3)、节点(node)节点是值集群中的具体服务器,作为集群的一部分,它可存储数据,参与集群的索引和搜索功能。和集群类
6、似,一个节点也是由一个名字来标识的,默认情况下,这个名字是一个随机名字,这个名字会在服务启动时赋予节点。这个名字对于管理者非常重要,因为在管理过程中,需要确定网络中的哪些服务器对应于 Elasticsearch 集群中的哪些节点。节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中,这意味着如果在网络中启动了若干个节点,并假定它们能够相互发现彼此,那么各节点将会自动地形成并加入到一个叫做“elasticsearch”的集群中。在一个集群里,可以拥有任意多个节点。并且,如果当前网络中没有运行任何Elasticsea
7、rch 节点,这时启动一个节点,会默认创建并加入一个叫做“elasticsearch”的集群。(4)、索引(index)索引是指一个拥有相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。每个索引均由一个名字来标识(必须全部是小写字母的),并且当要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。“索引 ”有两个意思: A.作为动词,索引指把一个文档 “保存”到 ES 中的过程,某个文档被索引后,就可以使用 ES 搜索到这个文档 B.作为名词,索引指保存文档的地方,相当于数据库概念中的“库” 为了方便理解,我们可以
8、将 ES 中的一些概念对应到我们熟悉的关系型数据库上:ES 索引 类型 文档DB 库 表 行在一个集群中,可以定义任意多的索引。(5)、类型(type)在一个索引中,可以定义一种或多种类型。类型是指索引的一个逻辑上的分类/分区,其语义可自定义。通常情况下,会为具有一组共同字段的文档定义一个类型。比如说,我们假设运营一个博客平台并且将所有的数据存储到一个索引中。在这个索引中,可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。(6)、文档(document)文档是指可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以
9、拥有某个订单的一个文档。文档以 JSON(Javascript Object Notation)格式来表示,而 JSON 是一个普遍存在的互联网数据交互格式。在一个 index/type 里面,可以存储任意多的文档。注意,尽管一个文档物理上存在于一个索引之中,但文档必须被赋予一个索引的 type。(7)、分片和复制(shards charset=UTF-8Content-Length: 95“count“ : 0,“_shards“ : “total“ : 0,“successful“ : 0,“failed“ : 02.2.2 源码安装(1)、获取 elasticsearch-2.4.6.t
10、ar.gz 源码包,并保存在系统/usr/local/src 中。(2)、解压安装# cd /usr/local/src# tar -xvf elasticsearch-2.4.6.tar.gz# mv elasticsearch-2.4.6 /usr/loca/es(3)、创建 es 用户及数据目录# groupadd es# useradd -g es es# mkdir -r /data/es-data# chown -R es:es /data/es-data# mkdir -r /var/log/elasticsearch# chown -R es:es /var/log/elast
11、icsearch(4)、es 配置# vim /usr/local/es/config/elasticsearch.yml注:配置参数时,需要先设置一个空格,否则启动时会报错。cluster.name: novanode.name: elk-node3node.master: falsenode.data: truepath.data: /data/es-datapath.logs: /data/logs/espath.logs: /data/logs/esnetwork.host: 0.0.0.0http.port: 9200discovery.zen.ping.multicast.enab
12、led: falsediscovery.zen.ping.unicast.hosts: “10.20.20.48“, “10.20.20.47“,“10.20.20.38“(5)、启动源码安装的 es 不能使用 root 用户启动,必须使用创建好的普通用户进行启动。# su - es$ /usr/local/es/bin/elasticsearch &2017-09-29 23:57:38,334WARN bootstrap unable to install syscall filter: seccomp unavailable: CONFIG_SECCOMP not compiled in
13、to kernel, CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER are needed2017-09-29 23:57:38,346WARN bootstrap Unable to lock JVM Memory: error=12,reason=Cannot allocate memory2017-09-29 23:57:38,346WARN bootstrap This can result in part of the JVM being swapped out.2017-09-29 23:57:38,346WARN bootstrap Increa
14、se RLIMIT_MEMLOCK, soft limit: 65536, hard limit: 655362017-09-29 23:57:38,346WARN bootstrap These can be adjusted by modifying /etc/security/limits.conf, for example: # allow user es mlockalles soft memlock unlimitedes hard memlock unlimited2017-09-29 23:57:38,347WARN bootstrap If you are logged in
15、 interactively, you will have to re-login for the new limits to take effect.2017-09-29 23:57:38,704INFO node elk-node3 version2.4.6, pid3375, build5376dca/2017-07-18T12:17:44Z2017-09-29 23:57:38,704INFO node elk-node3 initializing .2017-09-29 23:57:39,167INFO plugins elk-node3 modules lang-groovy, r
16、eindex, lang-expression, plugins , sites 2017-09-29 23:57:39,205INFO env elk-node3 using 1 data paths, mounts / (/dev/mapper/vg_nginx-lv_root), net usable_space 33.2gb, net total_space 36.8gb, spins? possibly, types ext42017-09-29 23:57:39,205INFO env elk-node3 heap size 1015.6mb, compressed ordinar
17、y object pointers true2017-09-29 23:57:39,205WARN env elk-node3 max file descriptors 4096 for elasticsearch process likely too low, consider increasing to at least 655362017-09-29 23:57:40,645INFO node elk-node3 initialized2017-09-29 23:57:40,645INFO node elk-node3 starting .2017-09-29 23:57:40,691INFO transport elk-node3 publish_address 10.20.20.38:9300, bound_addresses :93002017-09-2923:57:40,695INFOdiscoveryelk-node3 nova/DSP41KSoR2C_RdXJNPO4zg