在咱们平常生活中,咱们常常须要回顾之前发生的一些事情;或者,当出现了一些问题的时候,能够从某些地方去查找缘由,寻找发生问题的痕迹。无可避免须要用到文字的、图像的等等不一样形式的记录。用计算机的术语表达,就是 LOG,或日志。java
日志,对于任何系统来讲都是及其重要的组成部分。在计算机系统里面,更是如此。可是因为如今的计算机系统大多比较复杂,不少系统都不是在一个地方,甚至都是跨国界的;即便是在一个地方的系统,也有不一样的来源,好比,操做系统,应用服务,业务逻辑等等。他们都在不停产生各类各样的日志数据。根据不彻底统计,咱们全球天天大约要产生 2EB(1018)的数据。node
面对如此海量的数据,又是分布在各个不一样地方,若是咱们须要去查找一些重要的信息,难道仍是使用传统的方法,去登录到一台台机器上查看?看来传统的工具和方法已经显得很是笨拙和低效了。因而,一些聪明人就提出了创建一套集中式的方法,把不一样来源的数据集中整合到一个地方。linux
一个完整的集中式日志系统,是离不开如下几个主要特色的:web
- 收集-可以采集多种来源的日志数据 - 传输-可以稳定的把日志数据传输到中央系统 - 存储-如何存储日志数据 - 分析-能够支持 UI 分析 - 警告-可以提供错误报告,监控机制
ELK并非一款软件,而是一套完整的日志解决方案,由Elasticsearch、Logstash、Kibana这三款开源软件组成;一般是配合使用,并且又前后归于 Elastic.co 公司名下,故被简称为 ELK 协议栈json
Elasticsearch是基于Lucene开发的分布式存储检索引擎,用来存储各种日志;bootstrap
Logstash对日志进行收集、分析,并将其存储供之后使用;vim
Kibana是基于Node.js开发的展现工具,为Logstash和Elasticsearch提供用于日志展现的web页面,还用于帮助汇总、分析和搜索重要日志数据。centos
基本流程是 logstash 负责从各类数据源里采集数据,而后再写入 Elasticsearch,Elasticsearch 对这些数据建立索引,而后由 Kibana 对其进行各类分析并以图表的形式展现。浏览器
主机名 | IP地址 | 相关软件包 |
---|---|---|
CentOS7-1(linux-node1) | 172.16.10.138 | jdk、logstash、elasticsearch、kibana |
CentOS7-2(linux-node2) | 172.16.10.147 | jdk、elasticsearch |
systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch //导入密钥 cd /etc/yum.repo.d/ vim elasticsearch.repo //配置yum仓库 [elasticsearch-2.x] name=Elasticsearch repository for 2.x packages baseurl=http://packages.elastic.co/elasticsearch/2.x/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enable=1 yum list //从新加载yum仓库 yum install elasticsearch -y yum install java -y (1.8.0版本) java -version //查看java环境的版本信息确认是否安装 openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-b13) OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
cd /usr/share/elasticsearch/binruby
vim /etc/elasticsearch/elasticsearch.yml
-------cluster群集---------------- 17行 集群名称 cluster.name: silence //开启 (自定义) ---------node节点----------------- 23行 节点名称 node.name: linux-node1 //开启 (自定义) -----------paths路径------------ 工做目录 33:path.data: /data/es-data //数据存放位置 37:path.logs: /var/log/elasticsearch/ //日志存放位置 43行 防止交换swap分区 bootstrap.memory_lock: true //锁定内存 54行 监听网络 network.host: 0.0.0.0 58行 端口号 http.port: 9200
mkdir -p /data/es-data //建立数据存放目录 chown -R elasticsearch:elasticsearch /data/es-data/ //修改属主属组信息 systemctl start elasticsearch.service //开启服务 netstat -ntap | grep 9200 //检查端口是否开启
浏览器输入 172.16.10.138:9200
第一种 JAVA API
第二种 RESTful API (经过json格式交互)
curl -i -XGET 'http://172.16.10.147:9200/_count?pretty' -d '{ "query": { "match_all": {} } }' //输出显示 HTTP/1.1 200 OK Content-Type: application/json; charset=UTF-8 Content-Length: 95 { "count" : 0, "_shards" : { "total" : 0, "successful" : 0, "failed" : 0 } }
生产环境中必需要修改(注意)
vim /etc/security/limits.conf G到行尾添加 elasticsearch soft memlock unlimited elasticsearch hard memlock unlimited * soft nofile 65535 * hard nofile 65535 //重启生效 (生产环境中建议重启)
/usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head //下载ES插件 安装位置/usr/share/elasticsearch/plugins/head
浏览器访问 172.16.10.138:9200/_plugin/head/
添加 复合查询 /index-demo/test POST { "user":"tom", "mesg":"hello world" } 提交请求 ----------返回显示-------------- { "_index": "index-demo", "_type": "test", "_id": "AWVDUuVUPJxKK7V6Dj8E", "_version": 1, "_shards": { "total": 2, "successful": 1, "failed": 0 }, "created": true }
//这里和上面部署第一台是同样的因此小编上命令,不一样的地方小编会注明的哦!
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch //导入密钥 cd /etc/yum.repo.d/ vim elasticsearch.repo //配置yum仓库 [elasticsearch-2.x] name=Elasticsearch repository for 2.x packages baseurl=http://packages.elastic.co/elasticsearch/2.x/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enable=1 yum list //从新加载yum仓库 yum install elasticsearch -y yum install java -y (1.8.0版本) java -version //查看java环境的版本信息确认是否安装 openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-b13) OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode) vim /etc/elasticsearch/elasticsearch.yml -------cluster群集---------------- 17行 集群名称 cluster.name: silence //开启 (自定义) ---------node节点----------------- 23行 节点名称 node.name: linux-node1 //开启 (自定义) -----------paths路径------------ 工做目录 33:path.data: /data/es-data //数据存放位置 37:path.logs: /var/log/elasticsearch/ //日志存放位置 43行 防止交换swap分区 bootstrap.memory_lock: true //锁定内存 54行 监听网络 network.host: 0.0.0.0 58行 端口号 http.port: 9200 69行 自动发现机制 discovery.zen.ping.unicast.hosts: ["172.16.10.147", "172.16.10.138"] //这里选择单播列表自动发现机制 mkdir -p /data/es-data //建立数据存放目录 chown -R elasticsearch:elasticsearch /data/es-data/ //修改属主属组信息
vim /etc/elasticsearch/elasticsearch.yml
69行 自动发现机制 discovery.zen.ping.unicast.hosts: ["172.16.10.138", "172.16.10.147"] //这里选择单播列表自动发现机制
systemctl stop elasticsearch.service systemctl start elasticsearch.service
浏览器访问 172.16.10.138:9200/_plugin/head/
简单来讲logstash就是一根具有实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端;与此同时这根管道还可让你根据本身的需求在中间加上滤网,Logstash提供里不少功能强大的滤网以知足你的各类应用场景。
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch vim /etc/yum.repos.d/logstash.repo [logstash-2.1] name=Logstash repository for 2.1.x packages baseurl=http://packages.elastic.co/logstash/2.1/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enable=1 yum list yum install logstash -y
/opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{} }' hello
/opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug } }'
/opt/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["172.16.10.138:9200"] } }'
/opt/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["172.16.10.138:9200"] } stdout { codec => rubydebug } }'
vim /etc/logstash/conf.d/01-logstash.conf
input { stdin { } } output { elasticsearch { hosts => ["172.16.10.138:9200"] } stdout { codec => rubydebug } } /opt/logstash/bin/logstash -f /etc/logstash/conf.d/01-logstash.conf
ln -s /opt/logstash/bin/logstash /usr/bin/ vim file.conf input { file { path => "/var/log/messages" type => "system" start_position => "beginning" } } output { elasticsearch { hosts => ["172.16.10.138:9200"] index => "system-%{+YYYY.MM.dd}" } } logstash -f /root/file.conf
wget https://download.elastic.co/kibana/kibana/kibana-4.3.1-linux-x64.tar.gz //这里使用wget下载软件包,也能够复制连接至迅雷下载好以后共享上传 tar zxvf kibana-4.3.1-linux-x64.tar.gz -C /usr/local/ cd /usr/local/ mv kibana-4.3.1-linux-x64/ kibana
vim /usr/local/kibana/config/kibana.yml
//2行 server.port: 5601 //开启端口 //5行 server.host: "0.0.0.0" //容许访问服务器的地址 //12行 ES地址 elasticsearch.url: "http://172.16.10.138:9200" //20行 kibana.index: ".kibana"
screen是linux下的一种多重视窗管理程序。在使用telnet或SSH远程登陆linux时,若是链接非正常中断,从新链接时,系统将开一个新的session,没法恢复原来的session.screen命令能够解决这个问题。
yum install screen -y
/usr/local/kibana/bin/kibana ctrl+a+d 进行丢入后台 http://172.16.10.138:5601/