ELK的简单搭建
在Linux
下实现ElasticSearch
+Logstash
+Kibana
日志处理
一: 实验平台:CentOs 6.5
二: Java版本:jdk-8u111-linux-x64.tar.gz
三: ElasticSearch版本:elasticsearch-2.4.1.tar.gz
四: Logstash版本:logstash-2.4.1.tar.gz
五: Logstash的运行依赖于Java运行环境, Logstash 1.5以上版本不低于java 7推荐使用最新版本的Java。
六: Kibana版本:kibana-4.3.1-linux-x64.tar.gz
七: Redis版本:redis-3.2.6.tar.gz
八: 所用IP地址:
10.113.128.6 es+logstash+kibana+redis
10.113.128.5 es+logstash
10.113.128.12 es+logstash
1.Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
2.Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)。
3.kibana 也是一个开源和免费的工具,他Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
工作原理:在需要收集日志的所有服务上部署logstash,作为logstash agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到logstash indexer,logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示。
一、环境搭建
1.jdk
环境的搭建
$ mkdir /ane/jdk
$ tar -xzvf jdk-7u67-linux-x64.tar.gz -C /ane/jdk
#解压缩
添加Java环境变量。编辑/etc/profile/jdk.sh
$ vim/etc/profile/jdk.sh
#!/bin/bash
JAVA_HOME=/ane/java/jdk1.7.0_67
JAVA_BIN=$JAVA_HOME/bin
PATH=$PATH:$JAVA_BIN
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
source /etc/profile
#使环境变量立即生效
$ java -version #查看jdk版本
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
二、ElasticSearch安装
1.按官方文档下载解压Elasticsearch
$ curl -L -O https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.4/elasticsearch-2.3.4.tar.gz
#直接下载
https://www.elastic.co/downloads/past-releases/elasticsearch-2-3-4
#进入网页下载
$ mkdir /ane/es #为es创建目录
$ tar -zxf elasticsearch-2.3.4.tar.gz -C /ane/es/ #解压缩
2.集群运行ES
2.0
以后版本的ElasticSearch
运行,需要用普通用户的身份
所以需要添加普通用户
$ useradd es
$ mkdir /ane/es/data #es的数据存放路径
$ mkdir /ane/logs/es #es的日志路径
$ chown -R es:es es
$ su - es
修改配置文件elasticsearch.yml
$ vim config/elasticsearch.yml
cluster.name: jarbo #集群名 注意: 集群机器配置一致
node.name: jarbo-1 #节点名 节点不同,机器配置不同
path.data: /ane/data/es #数据存储位置
#path.data: /path/to/data1,/path/to/data2 #多个数据存储,有利于性能提升
path.logs: /ane/logs/es/ #日志文件的路径
bootstrap.mlockall: true #锁定内存,避免写入交换空间,降低性能
network.host: 10.113.128.6 #设置IP
http.port: 9200 #设置端口
discovery.zen.ping.unicast.hosts: ["10.113.128.5:9300","10.113.128.12:9300"]
#集群主节点初始列表,使用此列表进行探测
discovery.zen.minimum_master_nodes: 3 #集群中的节点可以知道其它N个有master资格的节点.
#gateway.recover_after_nodes: 3 #一个集群中的N个节点启动后,才允许进行恢复处理
#gateway.recover_after_time: 5m #初始化恢复过程的超时时间
#gateway.expected_nodes: 1 #设置这个集群中期望有多少个节点.一旦这N个节点启动(并且recover_after_nodes也符合),立即开始恢复过程(不等待recover_after_time超时)
#script.engine.groovy.inline.search: on
#script.engine.groovy.inline.aggs: on
#indices.recovery.max_bytes_per_sec: 100mb #设置恢复时的吞吐量,默认无限制
#indices.recovery.concurrent_streams: 10 #设置来限制从其它分片恢复数据时最大同时打开并发流的个数
调整ElasticSearch
内存elasticsearch.in.sh
生产比这个大,在此只用于测试
$ pwd
/ane/es/bin/
$ vim elasticsearch.in.sh
ES_MIN_MEM=1g
ES_MAX_MEM=1g
修改系统参数/etc/security/limits.conf
(可不操作)
$ vim /etc/security/limits.conf
es soft memlock unlimited #启用memlock
es hard memlock unlimited #启用memlock
es soft nofile 204800 #可打开文件数限制
es hard nofile 204800 #可打开文件数限制
3.插件安装
安装kopf
插件
ElasticSearch
是JavaScript
编写+ AngularJS
+ jQuery
一个简单的Web管理工具。
它提供了对一个Elasticsearch
集群执行常见任务的一种简单方法。
在Elasticsearch
的bin
目录下执行./plugin install lmenezes/elasticsearch-kopf
命令
./plugin install lmenezes/elasticsearch-kopf
-> Installing lmenezes/elasticsearch-kopf...
Plugins directory [/ane/es/elasticsearch-2.3.4/plugins] does not exist. Creating...
Trying https://github.com/lmenezes/elasticsearch-kopf/archive/master.zip ...
Downloading ....................................................................................................................................................................................................................................................................................DONE
Verifying https://github.com/lmenezes/elasticsearch-kopf/archive/master.zip checksums if available ...
NOTE: Unable to verify checksum for downloaded plugin (unable to find .sha1 or .md5 file to verify)
Installed kopf into /ane/es/elasticsearch-2.3.4/plugins/kopf
测试kopf
插件
访问测试:
http://10.113.128.6:9200/_plugin/kopf/
鼠标停留在disk
上可以看到磁盘使用情况,还可以看到索引
、分片
、文档数量
、大小
以及jvm
使用情况、cpu
、load
等
点击nodes可看到更多硬件信息
rest功能是编写语言的
点击more查看更多功能
Create index: 创建索引:
Cluster settings: 集群设置:
Aliases: 别名:
Analysis: 分析:
Percolator: 过滤器:
Snapshot: 快照
Index templates: 索引模板:
Cat apis: api
Hot threads: 热线程:
安装head
插件
`head`插件:
1.显示集群的拓扑,并且能够执行索引和节点级别操作
2.搜索接口能够查询集群中原始json或表格格式的检索数据
3.能够快速访问并显示集群的状态
在ElasticSearch
的bin
目录下执行./plugin install mobz/elasticsearch-head
命令
bin/plugin install mobz/elasticsearch-head
-> Installing mobz/elasticsearch-head...
Trying https://github.com/mobz/elasticsearch-head/archive/master.zip ...
Downloading .........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................DONE
Verifying https://github.com/mobz/elasticsearch-head/archive/master.zip checksums if available ...
NOTE: Unable to verify checksum for downloaded plugin (unable to find .sha1 or .md5 file to verify)
Installed head into /ane/es/elasticsearch-2.3.4/plugins/head
测试head
插件
访问测试:
http://10.113.128.6:9200/\_plugin/head/
添加数据(测试使用,可以不操作)
_index:创建了一个索引index-demo
_type:创建了一个类型test
_version:版本
total:分片2个
Successful:成功1个
Failed:失败0个
Created:状态成功
我们写一篇文档会帮我们分成5片(0-4,可以修改成多个),粗线代表主分片细线代表副本分片(可以理解为一主一备)正常情况下会将主分片和副本分片放在2台机器上
集群健康值介绍:
黄色代表没有主分片数据丢失,但是现在不是健康的状态(警告)应该有10个分片,现在只有5个。
红色代表有数据丢失
绿色代表正常
索引es
这里索引信息是open代表我们可以将它给关闭掉,这样就不会继续使用这个索引进行搜索
提示:删除之后索引数据是无法恢复的
4.启动
后两台按以上步骤安装Elasticsearch
分别启动
$ ./bin/elasticsearch &
jarbo-1
启动成功,jarbo-2
启动成功,jarbo-3
启动成功,jarbo-1
会检测到集群
会启用两个端口
9200:集群之间事务通信
9300:集群选举等
验证
$ curl -XGET 'http://10.113.128.6:9200/_cluster/health?pretty' #集群健康
$ curl -XGET 'http://10.113.128.6:9200/_cat/nodes?v' #集群节点数
$ curl -XGET 'http://10.113.128.6:9200/_cat/indices?v' #集群分片信息
三、logstash安装
1.使用yum安装(按照官方文档)
更新key文件
$ rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
创建logstash
的yum
仓库
$ vim /etc/yum.repo.d/logstash.repo
[logstash-2.4]
name=Logstash repository for 2.4.x packages
baseurl=https://packages.elastic.co/logstash/2.4/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
$ yum -y install logstash
#yum安装logstash
2.源码安装
官网下载logstash
https://www.elastic.co/downloads/past-releases/logstash-2-4-1
3.测试logstash(测试使用可不操作)
$ logstash -e "input {stdin{}} output {stdout{}}" #测试是否正常
input {stdin{}} #标准输入
output {stdout{}} #标准输出
输入aa
输出aa
表示正常
$ logstash -e 'input{stdin{}} output{stdout{codec=>rubydebug}}'
output{stdout{codec=>rubydebug}} #json格式输出
创建一个启动logstash
配置文件
第三步是用于前端显示,这步是用于文件(可后台操作),供测试,后面搭建完redis后才有接收~
$ pwd
/opt/logstash #使用 yum 安装的 logstash 在 /opt 目录下
$ vim logstash-simple.conf
input {
stdin{
}
}
output {
stdout{
codec=>rubydebug
}
}
以配置文件方式启动
$ bin/logstash -f logstash-simple.conf #以配置文件方式启动
$ logstash agent -f logstash-simple.conf --verbose #开启debug模式
四、安装redis
1.按官方文档下载解压redis
$ wget http://download.redis.io/releases/redis-3.2.6.tar.gz
$ tar -zxvf redis-3.2.6.tar.gz -C /ane/redis/
2.编译安装redis
$ yum -y install gcc #yum安装 gcc 编译环境
$ pwd
/ane/redis/redis-3.2.6
$ make && make install
成功 编译
修改redis.conf
配置文件
$ pwd
/ane/redis/redis-3.2.6
$ vim redis.conf
bind 10.113.128.6 #监听地址
port 6379 #监听端口
启动
$ redis-server redis.conf & #后台启动redis
$ redis-cli -c -h 10.113.128.6 -p 6379 #测试是否正常
10.113.128.6:7000> redis-cli -h 192.168.7.221 -p 6379 monitor #redis动态监控
OK
3.logstash配置redis
修改logstash
的启动配置文件
$ pwd
/opt/logstash
$ vim logstash-redis.conf #编辑收集日志的配置文件(在收集日志端配)俗称客服端
input {
file {
path => "/var/log/messages" #文件输入代替标准输入
type => "syslogs" #日志类型
}
}
#输入部分
output {
stdout{ codec => rubydebug} ##json格式输出
redis {
host => "10.113.128.6:6379" #redis输出配置
data_type => 'channel' #数据类型
key => 'ambiguous' #密钥,需要跟服务端配置一样才能接收到数据
}
}
#输出部分(输出到redis里)
编辑收入redis
传来数据 并创建日志的配置文件(在es端配,配合es收集日志)俗称服务端
$ vim logstash-es.conf
input {
redis {
host => "10.113.128.6"
port => 6379
data_type => 'channel' #与客服端一样的数据类型
key => 'ambiguous' #与客服端一样的密钥
}
}
output {
elasticsearch { hosts => ["10.113.128.5:9200","10.113.128.6:9200","10.113.128.12:9200"]}
file {
path => "/ane/data/TLSIT/%{+YYYY}/%{+MM}/%{+dd}/%{host}/%{host}_%{type}.%{+HH}.txt" #定义收集日志的路径
flush_interval => 0
message_format => "%{host} %{messages}" #转换成日志
}
}
测试
$ logstash agent -f logstash-redis.conf --verbose & #启动程序
$ redis-cli -h 10.113.128.6 -p 6379 monitor #监控redis
$ echo 12 >> /var/log/messages #伪造数据验证
访问es
端网页可以查询到
五、Kibana
1.官方文档下载解压
$ wget https://download.elastic.co/kibana/kibana/kibana-4.1.2-linux-x64.tar
$ mkdir /ane/kibana
$ tar -zxf kibana-4.1.2-linux-x64.tar.gz -C /ane/kibana/
修改配置文件kibana.yml
$ pwd
/ane/kibana/kibana-4.1.2-linux-x64/config
$ vim kibana.yml
port: 5601 #端口,默认5601
host: "10.113.128.6" #主机地址
elasticsearch_url: "http://10.113.128.6:9200"
kibana.index: ".kibana" #kibana是一个小系统,自己也需要存储数据(将kibana的数据保存到.kibana的索引中,会在ES里面创建一个.kibana)
2.启用
$ pwd
/ane/kibana/kibana-4.1.2-linux-x64/
$ bin/kibana &
结果kibana
由于位置错误始终无法启动,网上搜索信息发现是由于版本问题导致的,换了4.3.1的后启动正常。
启用成功 测试访问
10.113.128.6:5601
创建kibana的索引
创建一个用于存放系统日志的索引
3.使用Apache
代理
Kibana
有时候或许毕竟慢,日志不够直视化,就可以使用Apache
或Nginx
代理
$ yum -y install httpd
#yum安装Apache
创建链接
$ ln -s "/ane/data/TLSIT/" /var/www/html/syslogs
如果使用这样的方式的话,可以舍弃Elasticsearch
和kibana
测试访问
10.113.128.6/syslogs
OVER~
版权协议须知!
本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
1239 0 2017-01-27
博主卡片
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。
现在时间 2024-12-28
今日天气
随机推荐
站点统计
- 文章总数:241篇
- 分类总数:29个
- 评论总数:12条
- 本站总访问量 353273 次
@xiaozi 最后的分享的镜像下载地址打不开 服务器没有开机吗?
@yuanyuan 为什么我的4b安装centos7.9 插上tf卡 显示不兼...
@Wong arrhenius 牛比
@MakerFace 厉害了!
@TongSir 老哥 更新下我的友链链接 https://blog.ton...