多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# ELK安装笔记 刘银 ## 什么是ELK ELK是Elasticsearch、 Logstash、Kibana三个开源软件的组合而成,形成一款强大的实时日志收集、展示系统。 - **Elasticsearch(ES)**:基于Lucene的高性能搜索框架,特点:`高性能`,`分布式`,`restful` - **Logstash**:日志收集、结构化工具,可以从本地磁盘,网络服务消息队列中收集各种各样 的日志, 然后进行过滤分析, 并将日志输出到Elasticsearch(也可以是其他应用) - **Kibana**:可视化日志Web展示工具,对Elasticsearch中存储的日志进行展示,还可以生成炫丽的仪表盘。其原理是大量使用了ELasticsearch的聚合功能。 现在,除了ES外,Elastic网站提出了Elastic stack的概念,相当于一个全家桶,其中重要的组件还有**X-Pack** 和 **Beat** > Logstach是可以脱离ES单独使用的。Kibana不行。 ## ES安装(5.2+) 一、环境 1. JDK1.8 2. Linux内核3.5及以上 > 如果不是3.5以上内核,ES启动时会报异常,单机可以忽略。 > 如果是集群,ES启动报异常不会通过,要在ES安装目录的config文件夹下的elasticsearch.yml中配置:`bootstrap.system_call_filter: false`,忽略该异常。 二、单机安装(centos 6.8 64位) 1. 下载 elasticsearch-5.2.2.tar.gz(版本号可选) 2. 解压 `tar zxvf elasticsearch-5.2.2.tar.gz` 3. 执行安装目录下的`./bin/elasticsearch` 启动 三、启动中的问题 1. **不能用root启动**,ES官方直接不允许,必须新创建用户并授予相应的权限 2. 由于ES是一个对多线程要求很高的应用,所以对一些基础的linux系统配置要进行更改: - 相关系统设置: - vim /etc/sysctl.conf - vm.max_map_count= 262144 - sysctl –p - 系统打开文件数配置: * vim /etc/security/limits.conf * hard nofile 65536 * soft nofile 65536 - 修改用户打开的线程数,因为 es 的段要经常打开文件控制索引: * vim /etc/security/limits.d/90-nproc.conf * soft nproc 2048 3. 在安装目录的config目录中,有个jvm.options配置文件,其中有初始化jvm的大小。默认2g,官方推荐生产环境4g,我这里的虚拟机环境(单核,1G内存),改成256m: * -Xms256m * -Xmx256m > 通常在启动过程中,有异常报出来,根据异常信息去百度,都会有解决办法。 四、配置文件 在config目录下的`elasticsearch.yml`文件是主要的配置文件,配置参数解释如下: |名称 | 说明| |---|---| |`cluster.name` |集群名称,一个集群的唯一标识| |`node.name` |节点名称,每个节点唯一| |`node.rack` |为节点添加自定义属性| |`path.data` |数据存储路径,可默认| |`path.logs` |日志存储路径,可默认| |`bootstrap.memory_lock` |启动过程中是否为内存加锁,`true`/`false`| |`network.host` |绑定的本机ip| |`http.port` |自定义http端口,默认9200| |`discovery.zen.ping.unicast.hosts` |当新节点加入的时候,配置一个初始化主机列表用于节点发现| |`discovery.zen.minimun_master_nodes` |为了避免发生脑裂的最小节点数,数值为(有主节点资格的节点数量/2 + 1)| |`gateway.recover_after_nodes` | 如果集群发生重启,要直到多少个节点启动完成,才能开始进行集群初始化恢复动作| |`action.destructive_requires_name` |删除索引时,需要明确的索引名称| 五、集群配置(以3台为例,3台都可以成主节点) 关键点: - 集群名称相同 - 节点名称不能相同 - 计算最小主节点数 - 要锁住内存防止异常 配置示例: * cluster.name: wukong *集群名称,整个集群唯一,集群中的节点要相同* * node.name: wk-01 *节点名称,每个节点(ES)唯一* * bootstrap.memory_lock: true *锁住内存,避节点抛异常造成集群不可用* * newwork.host: 192.168.87.131 *本节点的地址* * discovery.zen.ping.unicast.host: [“192.168.87.131”,”192.168.87.130”,”192.168.87.129”] *启动时的集群发现* * discovery.zen.minimum_master_nodes: 2 *最小主节点数* 注意: 在我的centos6.8 环境中,还要执行如下命令来解除锁内存的限制(命令是当时生效,可永久配置) > ulimit -l unlimited ==由于条件限制,下面的演示都是单节点环境。集群的特有信息,将在以后补充== 当我们启动ES后,在命令行输入 > curl -XGET '192.168.87.131:9200' 出现以下信息,表示启动成功 ```javascript { "name" : "liuyin-n1", // 节点名称 "cluster_name" : "liuyin", // 集群名称 "cluster_uuid" : "Wn0JKxCKRwK0aTSm8BPZTg", // 节点uuid,唯一,由ES代码生成 "version" : { "number" : "5.2.2", // es版本号 "build_hash" : "f9d9b74", // hash值 "build_date" : "2017-02-24T17:26:45.835Z", // 创建时间 "build_snapshot" : false, // 是否创建快照 "lucene_version" : "6.4.1" // 底层lucene版本号 }, "tagline" : "You Know, for Search" // 口号 } ``` 查看集群基本信息 > curl -XGET '192.168.87.131:9200/_cluster/health?pretty' ``` { "cluster_name" : "liuyin", // 集群名称 "status" : "yellow", // 集群状态,重要 "timed_out" : false, "number_of_nodes" : 1, // 节点数,这里可以看出只有一个阶段,是单机环境 "number_of_data_nodes" : 1, "active_primary_shards" : 23, "active_shards" : 23, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 23, "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" : 50.0 } ``` 关于status 颜色 | 含义 ---|--- green | 所有主要分片和复制分片都可用 yellow | 所有主要分片可用,但不是所有复制分片都可用,**最小保障** red | 不是所有主分片都可用 >关于ES的命令,不是本章内容,有兴趣可以参看其他相关资料 ## 插件安装 ### 一、head插件 head插件是一个网页版的ES可视化客户端,简单易用、功能强大。 在ES2.X时代,head作为ES的标准插件来安装,到了ES5.X,官方已经把head移除了(估计是太强大,提供了很多官方其他插件要收费才能使用的功能,而官方强烈推荐的使用x-pack来管理ES,也和head的管理有所冲突,所有head被放弃了),但head也做了变通,依然可以作为一个独立的前端应用,通过node.js来安装。 1、通过node.js来安装head插件 > mkdir head > cd head > git clone git://github.com/mobz/elasticsearch-head.git > cd elasticsearch-head > npm install > npm install -g grunt-cli > grunt server 看到如下信息,表示启动成功 - Running "connect: server" (connect) task - Waiting forever... - Started connect web server on http://localhost:9100 可以看到,默认绑定的是9100端口。 2、配置ES允许跨域访问 由于head插件已经不能被ES默认支持,我们还要在ES的配置文件`elasticsearch.yml`中加入下面两个配置后重启,才能访问: > http.cors.enabled: true > http.cors.allow-origin: "*" 根据ip地址访问:`192.168.87.131:9100`,如下: ![image](http://omumkhlu9.bkt.clouddn.com/head%E6%8F%92%E4%BB%B6%E7%95%8C%E9%9D%A2.jpg) 至此,head插件的安装就成功了 二、X-Pack安装 1、X-Pack简介 X-Pack是Elastic Stack(可以理解为整个Elastic体系)中一个非常重要的组件,它集如下功能于一身: ![image](http://omumkhlu9.bkt.clouddn.com/X-Pack%E5%8C%85%E6%8B%AC%E7%9A%84%E5%8A%9F%E8%83%BD.jpg) > 依次为:安全、告警、监控、报告、图表、机器学习(即将支持) 可以说,X-Pack是Elastic家族不可缺少的重要组件。 2、X-Pack安装 X-Pack是一个插件,它必须依赖于主体进行安装。比如依赖于ES、Logstash、Kibana。这里在ES下安装如下: 先停止ES服务 然后再安装目录的bin目录下执行elasticsearch-plugin > ./bin/elasticsearch-plugin install x-pack 但一个问题是,x-pack有100m+,这种方式直接从国外网站下载插件,是很慢的,所有可以把x-pack下载下来再安装,下载地址: [https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-5.2.2.zip](https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-5.2.2.zip) 上传到linux中,比如在/luyou/elk/x-pack-5.2.2.zip,执行命令如下: > bin/elasticsearch-plugin install file:///luyou/elk/x-pack-5.2.2.zip 出来一下信息,最后选择y,安装成功 > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ > @ WARNING: plugin requires additional permissions @ > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ > * java.lang.RuntimePermission accessClassInPackage.com.sun.activation.registries > * java.lang.RuntimePermission getClassLoader > * java.lang.RuntimePermission setContextClassLoader > * java.lang.RuntimePermission setFactory > * java.security.SecurityPermission createPolicy.JavaPolicy > * java.security.SecurityPermission getPolicy > * java.security.SecurityPermission putProviderProperty.BC > * java.security.SecurityPermission setPolicy > * java.util.PropertyPermission * read,write > * java.util.PropertyPermission sun.nio.ch.bugLevel write > * javax.net.ssl.SSLPermission setHostnameVerifier > See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html > for descriptions of what these permissions allow and the associated risks. > > Continue with installation? [y/N]y **这里选择y** 同理,要在kibana、Logstach中安装X-Pack,也类似: > bin/kibana-plugin install file:///luyou/elk/x-pack-5.2.2.zip > bin/logstash-plugin install file:///luyou/elk/x-pack-5.2.2.zip 删除X-Pack > bin/kibana-plugin remove x-pack 3、X-Pack设置 X-Pack安装成功后,默认会启用5个设置 |名称 | 说明| |---|---| |xpack.security.enabled | 安全选项,默认true,可在elasticsearch.yml或kibana.yml配置| |xpack.monitoring.enabled | 监控选项,默认true,可在elasticsearch.yml或kibana.yml配置| |xpack.graph.enabled | 图表选项,默认true,可在elasticsearch.yml或kibana.yml配置| |xpack.watcher.enabled | 观察选项,默认true,只能在elasticsearch.yml中配置| |xpack.reporting.enabled | 报告选项,默认true,只能在kibana.yml中配置| 4、X-Pack用户安全 当X-Pack安装完成,重启ES后,会默认开启一个超级用户,用户名为elastic,密码为changeme,下面先给用户改密码,如改成"123456": > curl -XPUT -u elastic:changeme '192.168.87.131:9200/_xpack/security/user/elastic/_password' -d > '{ > “password”:“123456” > }' > 在安装了X-Pack后,所有的ES访问操作要加参数`-u 用户名:密码`来执行。 注意: > 当安装了x-pack后,我们的head插件将不能再访问ES,需要在ES的elasticsearch.yml文件中配置禁用安全选项如下: > xpack.security.enabled: **false** > 但这种方式也就弱化了X-Pack的功能,如何取舍要自己衡量。建议生产环境还是不用head。 ## Kibana安装 1、Kibana简介 Kibana是一个为ElasticSearch服务的,强大的数据图像化组件(还包括友好的命令行工具),先来感受一下: ![image](http://omumkhlu9.bkt.clouddn.com/Kibana%E5%9B%BE%E7%A4%BA01.jpg)![image](http://omumkhlu9.bkt.clouddn.com/Kibana%E5%9B%BE%E7%A4%BA02.jpg)![image](http://omumkhlu9.bkt.clouddn.com/Kibana%E5%9B%BE%E7%A4%BA03.jpg) > Kibana的原理其实就是利用了ES提供的强大的**聚合**操作来生成各种图表。 2、Kibana安装 先下载,解压: > wget https://artifacts.elastic.co/downloads/kibana/kibana-5.2.2-linux-x86_64.tar.gz > tar -xzf kibana-5.2.2-linux-x86_64.tar.gz > cd kibana/ 由于前边ES安装了X-Pack,我们安装Kibana后,也把X-Pack安装上,可以通过Kibana来进行监控和权限管理等: > bin/kibana-plugin install file:///luyou/elk/x-pack-5.2.2.zip 配置,在kibana安装目录,config目录下`kibana.yml` > server.host: "192.168.87.131" kibana主机地址,这里我ES和Kibana都在一台虚拟机上 > elasticsearch.url: "http://192.168.87.131:9200" ES服务器地址 > elasticsearch.username: "elastic" 以什么用户名连接ES,这里是默认超级用户 > elasticsearch.password: "123456" 密码,前面已经从默认的"changme"改成"123456" Kibana的配置非常多,这里只给出最基本的4个,其他的请自行查阅相关资料 启动: > bin/kibana 注意有这一句,是kibana的访问地址,默认端口就是5601 > [12:06:27.937] [info][listening] Server running at http://192.168.87.131:5601 下面可以用浏览器访问了。(貌似kibana对ie内核支持不行,请用chrom或firefox) 出现以下界面,则kibana和x-pack都安装成功了: ![image](http://omumkhlu9.bkt.clouddn.com/Kibana%E7%99%BB%E9%99%86%E7%95%8C%E9%9D%A2.jpg) 输入用户名elastic,密码123456,进入kibana主界面 如图: ![image](http://omumkhlu9.bkt.clouddn.com/Kibana%E4%B8%BB%E7%95%8C%E9%9D%A2.jpg) > 如果没有开启X-Pack,则不需要登陆,Kibana的功能也会少一些。 ## Logstash安装 1、简介 Logstash是一个开源的,运行与服务器端的数据(日志文件,网络包等)提取管道,对数据进行提取、转换、存储。它是一个独立的组件,不需要依赖ES,但作为Elastic Stack家族中的重要一员,通常会把提取的数据用ES进行存储。 官方的这张图能很好的表明Logstash的作用: ![image](http://omumkhlu9.bkt.clouddn.com/Logstash%E4%BB%8B%E7%BB%8D%E5%9B%BE.jpg) 数据收集来源: 1. 日志文件 2. 系统指标 3. 网络 4. 数据库(数据流) 5. 传感器 数据输出后可用于: 1. 分析 - ES - MongoDB、Riak之类的数据库 2. 归档 - HDFS - S3 Google Cloud Storage 3. 监控 - Nagios - Ganglia - Zabbix - Graphite - Datadog - CloudWatch 4. 告警 - Watcher *(with Elasticsearch)* - Email - Pagerduty - HipChat - IRC - SNS 2、Logstash工作流程 Logstash工作有3个阶段: ``` graph LR inputs-->filters filters-->outputs ``` 这里inputs、filters、outputs刚好是Logstash的3大基本插件: 1. **inputs**:负责收集数据(数据从哪里来) 2. **filters**:负责解析、匹配、过滤、完善数据(如何处理) 3. **outputs**:负责将处理好的数据发送出去(数据到哪里去) 此外,Logstash还有一个插件叫**Codec**,它是一个作用于inputs或outputs内的插件,用于对数据进行一些特定格式的转换。如处理成json格式,如multiline将多行转换成一行。 下面是这些插件所支持的应用(非完全统计)。 |Input Plugins | Codec plugins | Filter plugins | Output plugins| |---|---|---|---| |beats|avro|aggregate|csv| |couchdb_changes| cef |anonymize| elasticsearch| |elasticsearch| collectd| csv |email| |file| dots| date| file| |gelf| es_bulk |de_dot |graphite| |generator| fluent| dissect| http| |graphite| graphite| dns| kafka| |heartbeat| json| drop |rabbitmq| |http| json_lines| fingerprint| redis| |http_poller |line| geoip| s3| |jdbc| msgpack |grok| stdout| |kafka |multiline| json| tcp| |log4j| plain| kv| udp| |rabbitmq| rubydebug| mutate || |redis|| ruby || |s3 || sleep || |sqs || split || |stdin|| throttle || |syslog|| syslog_pri || |tcp || translate || |twitter || urldecode || |udp|| useragent || || | uuid || ||| xml || 一个基本的Logstash使用流程如下: ![image](http://omumkhlu9.bkt.clouddn.com/Logstash%E7%AE%80%E5%8D%95%E6%B5%81%E7%A8%8B.jpg) 3、安装Logstash 下载[:官网下载页面](https://www.elastic.co/downloads/logstash),约90M 解压: > tar zxvf /luyou/elk/logstash-5.2.2.tar.gz 最简单的执行(省去了filters): > bin/logstash -e 'input { stdin { } } output { stdout {} }' 成功的话,会看到这样一个信息: - Successfully started Logstash API endpoint {:port=>9600} 上面的命令,使用了标准输入`stdin`和标准输出`stdout`插件,你在命令行的所有输入,都会输出到控制台(再次显示)。 这时候输入一些字符,都会再输出一遍,但是已经默认带上了**时间**和**IP**信息。到这里,安装就算成功了。 4、配置 上边的例子只能是验证是否安装成功,下面来看一下如何配置 > vim config/jvm.options 这里jvm的设置,请根据自己的环境适当调整。 在安装目录创建一个\.conf文件,比如ly.conf,编辑如下: ``` input { file { path => "/luyou/elk/logs/test.log" } } filter { } output { elasticsearch { hosts => ["192.168.87.131:9200"] user => "elastic" password => "123456" } } ``` 执行: > bin/logstash -f ly.conf 这只是一个简单的例子,而Logstash里面最强大的filter插件并没有涉及。 关于filter,我个人认为是Logstash的亮点所在(也是学习成本最高的),它对进来的数据经过筛选、格式化、重命名、分段、组合、添加,转换成你最终想要的格式,再输出。关于filter的介绍,至少要重新写一个章节。 5、个人看Logstash优缺点 优点 | 缺点 :---:|:---: 不依赖于Elastic的其他组件,可独立使用 |比较笨重,安装包有近90M 适用范围非常广泛,几乎包括了所有常见的应用场景 | 有时候,配置文件会很繁琐 Filter功能强大,满足你的“私人订制” | 学习成本较高 正因为有了Logstash的这些缺点,才有了**Beat**组件的流行 ## Beat组件安装 1、Beat简介 上边已经说了,Logstash虽然功能强大,但过于笨重。假如我们有多台服务器,每台服务器都安装Logstash显然不是好主意。于是,有了Beat组件集,你可以把它看成一个filter已经定义成模板的,满足于特定需求的Logstash。 Beat组件尽可能轻量,通过不同的类型来满足不同的需求,在功能上甚至是Logstash的一种补充。官网对Beat组件所做的事情就是:**获取特定格式的数据,然后发送给ES或Logstash(Logstash再对数据进一步处理),并在Kibana上展示出来** 2、Beat分类 官方Beat有如下几种: - **Filebeat**:获取数据(日志)文件 - **Metricbeat**:获取系统信息 - **Packetbeat**:获取网络包(并分析) - **Winlogbeat**:获取Windows事件日志 - **Heartbeat**:获取服务器存活信息 下面这张图可以很好理解Beat的作用: ![image](http://omumkhlu9.bkt.clouddn.com/Beat%E5%9F%BA%E6%9C%AC%E6%B5%81%E7%A8%8B.jpg) > 注意,beat不只是能输出到ES或Logstash,还能输出到**kafka**、**Redis**、**文件**、**控制台**... 下面这张图,通过filebeat让你更好的知道beat的功能: ![image](http://omumkhlu9.bkt.clouddn.com/FileBeat%E5%9F%BA%E6%9C%AC%E6%B5%81%E7%A8%8B.jpg) 更好的消息是,官方结合Beat推出了做好的Kibana **Dashboard**,可以拿来即用。 3、Beat安装(以**Metricbeat**为例) - 下载合适的版本,我这里是按照centos6.8 选在Linux 64位 [下载页面](https://www.elastic.co/downloads/beats/metricbeat) - 解压,进入目录 > vim metricbeat.yml 这里我们演示发送到ES的配置。在配置文件最后,提供了ES、Logstash、Logging的配置示例,默认ES是打开的,这里我们修改如下(ES没有安装x-pack可以不配用户密码): > hosts: ["192.168.87.131:9200"] > username: "elastic" > password: "123456" - 保存、退出 - ES安装metricbeat模板: > curl -XPUT -u elastic:123456 'http://192.168.87.131:9200/_template/metricbeat' --data-binary @/etc/luyou/metricbeat-5.2.2-linux-x86_64/metricbeat.template.json - 安装官方提供的Dashboard 1. 切换到Metricbeat安装目录 2. ~~最基本的安装方式为(这里不适合,默认安装ES地址为locahhost:9200,而且没有认证)~~ > ./scripts/import_dashboards 3. 这里这样安装 1. 下载所有的Dashboard到当前目录[ https://artifacts.elastic.co/downloads/beats/beats-dashboards/beats-dashboards-5.2.2.zip]( https://artifacts.elastic.co/downloads/beats/beats-dashboards/beats-dashboards-5.2.2.zip) 2. 通过文件安装,安装到指定的ES,使用用户名和密码 > ./scripts/import_dashboards -file beats-dashboards-5.2.2.zip -es http://192.168.87.131:9200 -user elastic -pass 123456 4. 这样安装就结束了 4、运行Beat(以**Metricbeat**为例),看效果 - 在安装了官方提供的Dashboard后,可以在kibana中看见如下定义好的图表模板 ![image](http://omumkhlu9.bkt.clouddn.com/%E5%AE%98%E6%96%B9DashBoard.jpg) - 启动Metricbeat > ./metricbeat - kibana添加索引 ![image](http://omumkhlu9.bkt.clouddn.com/kibana%E6%B7%BB%E5%8A%A0%E7%B4%A2%E5%BC%95.jpg)![image](http://omumkhlu9.bkt.clouddn.com/kibana%E6%B7%BB%E5%8A%A0%E7%B4%A2%E5%BC%952.jpg) - 在这里添加,找几个和系统性能相关的图表,排一下版,可以保存 ![image](http://omumkhlu9.bkt.clouddn.com/Dashboard%E6%B7%BB%E5%8A%A0.jpg) - 你保存的以后可以在这里打开,这里还有一些已经定义好的。 ![image](http://omumkhlu9.bkt.clouddn.com/Dashboard%E6%89%93%E5%BC%80.jpg) - 可以展示了,注意右上角的时间范围和刷新频率 ![image](http://omumkhlu9.bkt.clouddn.com/%E7%B3%BB%E7%BB%9F%E7%9B%91%E6%B5%8B%E6%A0%B7%E4%BE%8B.jpg) 先到这里,待续.....