[喵咪BELK实战(2)] elasticsearch+kibana搭建

[喵咪BELK实战(2)] elasticsearch+kibana搭建

前言

上一节我们介绍了日志系统和BELK之后就要到激动人心的安装环境了,实践出真知都知道日志系统很重要只有把它搭建起来才有效果,那我们今天就来一同搭建 BELK 日志系统中的elasticsearch+kibana来进行实时的索引在线查看功能

附上:

喵了个咪的博客:w-blog.cn

官网地址:https://www.elastic.co/cn/

1. 准备工作

BELK下载地址

笔者这里的机器系统是centos6.8,使用BELK需要安装jdk1.8以上(主要是elasticsearch依赖)

jdk1.8可以通过官网下载: Java SE Development Kit 8 - Downloads

tar -zxvf jdk-8u101-linux-x64.tar.gz
mv jdk1.8.0_101/ /usr/local/jdk1.8
# 设置环境变量
vim /etc/profile
# 加入如下内容
# java
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=/usr/local/jdk1.8/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export 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进行程序常驻安装可以参考笔者博文: 喵咪Liunx(1)计划任务队列脚本后台进程Supervisor帮你搞定 - 文振熙的个人空间

2. elasticsearch

elasticsearch是强大的索引程序,支持大量的数据索引查询,使用JAVA编写,缺点是太吃资源(CPU,内存)

2.1 安装

首先我们安装配置elasticsearch

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz
tar -zxvf elasticsearch-5.3.0.tar.gz
mv 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 esgroup
useradd esuser -g esgroup -p espassword
# 吧elasticsearch目录的权限赋予esuser
chown -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.yml
bootstrap.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=true
autorestart=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.gz
tar -zxvf kibana-5.3.0-linux-x86_64.tar.gz
mv 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

# 服务监听端口默认5601
server.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 kibanauser
chmod 400 /usr/local/nginx/passwd.db
chown -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=true
autorestart=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 可以进行查看,那么今天的博文就到这里我们下次再见...

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【编程基础】linux常用命令介绍(一)

系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecod...

42011
来自专栏云计算教程系列

如何在CentOS 7上使用Postgres,Nginx和Gunicorn设置Django

Django是一个功能强大的Web框架,可以帮助您启动Python应用程序或网站。Django包含一个简化的开发服务器,用于在本地测试您的代码,但是对于任何与生...

1653
来自专栏北京马哥教育

CentOS系统启动流程你懂否

一、Linux内核的组成 相关概念: Linux系统的组成部分:内核+根文件系统 内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序。 ...

3794
来自专栏C/C++基础

Linux命令(5)——shutdown命令

使用shutdown命令时,在系统关机前,可以通知所有登录者系统将要关闭。此时login指令会被冻结,新用户将不能再登录,这是推荐使用的安全关机方式。关机之前,...

1184
来自专栏CaiRui

memcached服务

介绍 它是一套数据缓存系统或软件 用于动态应用系统中缓存数据库的数据,减少数据库的访问压力,达到提升性能的效果,实际应用环境中多用于数据库的cache的应用。它...

3808
来自专栏北京马哥教育

巧用HTTP 响应头部提高 Web 安全性

在 Web 服务器做出响应时,为了提高安全性,在 HTTP 响应头中可以使用的各种响应头字段。 1、X-Frame-Options 该响应头中用于控制是否在浏览...

3457
来自专栏北京马哥教育

CentOS系统启动流程你懂否

一、Linux内核的组成 相关概念: Linux系统的组成部分:内核+根文件系统 内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序。 ...

3785
来自专栏PHP技术大全

利用PHP扩展Taint找出网站的潜在安全漏洞实践

笔者从接触计算机后就对网络安全一直比较感兴趣,在做PHP开发后对WEB安全一直比较关注,2016时无意中发现Taint这个扩展,体验之后发现确实好用;不过当时在...

1502
来自专栏Brian

Install Django Nginx uWSGI

概述 最近项目需要安装和配置多站点环境,所以把多站点开发环境配置和安装记录下来,帮助其他人少走坑。 安装Python 2.7.x 首先安装一些开发环境基本的包和...

4019
来自专栏琯琯博客

ThinkPHP 连接 sql server 数据库配置

一、ThinkPHP3 的配置 二、ThinkPHP5 的配置 三、原生 pdo sqlsrv 连接 四、原生 sqlsrv 连接 五、总结 PHP 连接 sq...

5698

扫码关注云+社区

领取腾讯云代金券