[喵咪BELK实战(2)] elasticsearch+kibana搭建
前言
上一节我们介绍了日志系统和BELK之后就要到激动人心的安装环境了,实践出真知都知道日志系统很重要只有把它搭建起来才有效果,那我们今天就来一同搭建 BELK 日志系统中的elasticsearch+kibana来进行实时的索引在线查看功能
附上:
喵了个咪的博客:
官网地址:
1. 准备工作
BELK下载地址
- logstash :
- filebeat :
- elasticsearch :
- kibana :
笔者这里的机器系统是centos6.8,使用BELK需要安装jdk1.8以上(主要是elasticsearch依赖)
jdk1.8可以通过官网下载:
tar -zxvf jdk-8u101-linux-x64.tar.gzmv jdk1.8.0_101/ /usr/local/jdk1.8# 设置环境变量vim /etc/profile# 加入如下内容# javaexport JAVA_HOME=/usr/local/jdk1.8export JRE_HOME=/usr/local/jdk1.8/jreexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATHexport PATH=$JAVA_HOME/bin:$PATH# 使得环境变量生效source /etc/profile# 打印java版本号java -version# 看到如下输出java环境安装完成java version "1.8.0_101"Java(TM) SE Runtime Environment (build 1.8.0_101-b13)Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
使用Supervisor进行程序常驻安装可以参考笔者博文:
2. elasticsearch
elasticsearch是强大的索引程序,支持大量的数据索引查询,使用JAVA编写,缺点是太吃资源(CPU,内存)
2.1 安装
首先我们安装配置elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gztar -zxvf elasticsearch-5.3.0.tar.gzmv elasticsearch-5.3.0 /usr/local/
此时就可以启动elasticsearch了使用**/usr/local/elasticsearch-5.3.0/bin/elasticsearch** 就可以运行但是会得到如下异常:
[2017-04-27T15:12:06,495][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
主要原因是不能使用root用户来运行elasticsearch, elasticsearch在默写情况下可以直接对服务器执行脚本,出于安全性老老实实建立一个用户:
groupadd esgroupuseradd esuser -g esgroup -p espassword# 吧elasticsearch目录的权限赋予esuserchown -R esuser:esgroup /usr/local/elasticsearch-5.3.0/# 切换用户运行su esuser
看到如下数据表明elasticsearch可以正常运行:
[2017-04-27T15:15:12,291][INFO ][o.e.c.s.ClusterService ] [q-flXxl] new_master {q-flXxl}{q-flXxldTxWSCTqQn-Rjjg}{dXOgMmGISWyP5UB-_VPpjQ}{127.0.0.1}{127.0.0.1:9300}, reason: zen-disco-elected-as-master ([0] nodes joined)[2017-04-27T15:15:12,312][INFO ][o.e.h.n.Netty4HttpServerTransport] [q-flXxl] publish_address {127.0.0.1:9200}, bound_addresses {127.0.0.1:9200}[2017-04-27T15:15:12,315][INFO ][o.e.n.Node ] [q-flXxl] started
可以通过url调用的方式验证服务是否可用
curl localhost:9200# 会有如下输出{ "name" : "q-flXxl", "cluster_name" : "elasticsearch", "cluster_uuid" : "vVx27KRfTR64Wc1NCwBO_Q", "version" : { "number" : "5.3.0", "build_hash" : "3adb13b", "build_date" : "2017-03-23T03:31:50.652Z", "build_snapshot" : false, "lucene_version" : "6.4.1" }, "tagline" : "You Know, for Search"}
2.2 警告解决
如果在输出started之前还有一些[WARN]可以一一解决掉:
1.此警告是对于最大文件打开数量过少导致的
[2017-04-27T15:15:09,246][WARN ][o.e.b.BootstrapChecks ] [q-flXxl] max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]vi /etc/security/limits.conf # 添加或修改如下内容:* soft nofile 65536* hard nofile 65536
2.此警告是对于最大虚拟内存过少导致的
[2017-04-27T15:15:09,246][WARN ][o.e.b.BootstrapChecks ] [q-flXxl] max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]vi /etc/sysctl.conf # 添加下面配置:vm.max_map_count=262144# 执行sysctl -p
3.在阿里云服务器上可能出现
[2017-04-27T15:15:09,246][WARN ][o.e.b.BootstrapChecks ] [q-flXxl] system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk# 编辑配置文件vim /usr/local/elasticsearch-5.3.0/config/elasticsearch.ymlbootstrap.system_call_filter: false
2.3 配置文件
在配置文件中有一些关键配置,编辑文件/usr/local/elasticsearch-5.3.0/config/elasticsearch.yml
# 服务监听IP地址network.host: localhost # 服务监听端口http.port: 9200 # 索引文件和日志文件存储地址默认是在安装目录 path.data: /data/elasticsearch/data path.logs: /data/elasticsearch/logs
注意:elasticsearch没有安全控制一定要限制内网才能使用,有elasticsearch被劫持勒索的事件
2.4 使用Supervisor运行
使用Supervisor常驻启动修改配置文件加入如下语句在重启Supervisor就可以在后台运行
[program:elasticsearch];你需要执行的语句command=/usr/local/elasticsearch-5.3.0/bin/elasticsearch;是否自动启动autostart=trueautorestart=true;运行程序的用户user=esuser
3 kibana
kibana是一个使用elasticsearch 作为数据源的 UI可视化 查询工具
3.1 安装
kibana 安装就相对简单了很多
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.3.0-linux-x86_64.tar.gztar -zxvf kibana-5.3.0-linux-x86_64.tar.gzmv kibana-5.3.0-linux-x86_64 /usr/local/kibana-5.3.0
默认kibana只能使用localhost进行访问,需要修改配置文件来允许外网访问
vim /usr/local/kibana-5.3.0/config/kibana.yml# 服务监听端口默认5601server.port: 5601 # 服务监听IP段server.host: "外网地址" # 需要连接到elasticsearch的地址elasticsearch.url: "http://localhost:9009"
然后使用外网地址就可以访问了
但是现在elasticsearch还没有数据所以也没有办法查看检索
3.2 对kibana进行权限控制
细心的大家已经发现了登录kibana居然没有任何的限制.... 那么要怎么办呢? 这边笔者建议使用nginx来进行权限验证 (Nginx安装细节就不列举出来了)
yum install httpd# 创建用户需要输入密码htpasswd -c /usr/local/nginx/passwd.db kibanauserchmod 400 /usr/local/nginx/passwd.dbchown -R www:www /usr/local/nginx/passwd.db
需要让kibana配置文件改回到localhost限制外网访问之后在nginx加入如下配置:
server { listen 8081; server_name _; location / { auth_basic "secret"; auth_basic_user_file /usr/local/nginx/passwd.db; proxy_pass http://localhost:5601; }}
然后重启nginx之后会发现老的5601无法访问了,访问8081端口会出现如下界面:
输入之前配置好的用户名密码即可正常使用
3.3 使用Supervisor运行
使用Supervisor常驻启动修改配置文件加入如下语句在重启Supervisor就可以在后台运行
[program:kibana];你需要执行的语句command=/usr/local/kibana-5.3.0/bin/kibana;是否自动启动autostart=trueautorestart=true;运行程序的用户user=root
4.创建测试数据
虽然还没有logstash + filebeat来帮助采集数据但是我们可以先手动向elasticsearch中创建索引然后使用 kibana 进行查看,先来了解一下elasticsearch常用API
# 查看集群状态curl 'localhost:9200/_cat/health?v'# 查看所有索引列表curl 'localhost:9200/_cat/indices?v'# 创建索引curl -XPUT 'localhost:9200/索引名称?pretty'# 插入索引curl -XPUT 'localhost:9200/索引名称/TYPE名称/ID名称?pretty' -d '消息体必须是JSON'# 查看索引curl -XGET 'localhost:9200/索引名称/TYPE名称/ID名称?pretty'# 删除缩影curl -XDELETE 'localhost:9200/索引名称?pretty'
我们试着创建一个索引并且写入一条数据:
curl -XPUT 'localhost:9200/test-log-2017-4-28?pretty'curl -XPUT 'localhost:9200/test-log-2017-4-28/log/1?pretty' -d '{"msg":"这是一条测试log"}'
然后在kibana中就可以查看了
总结
本节我们优先安装并且比较完整的配置了elasticsearch+kibana 这样一个索引和查询系统,并且也了解了elasticsearch基本的使用方式,下一节将会结合日志采集系统logstash + filebeat进行日志采集传输到elasticsearch 让 kibana 可以进行查看,那么今天的博文就到这里我们下次再见...
注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!