搭建Elasticsearch和kibana完成初步ELK日志分析平台搭建

目录

1.ELK概述

2.Elasticsearch概述

3.Elasticsearch 安装

单机版安装

集群安装

4.插件安装

5.Elasticsearch基本操作

1)集群API简单管理

2)查询_cat方法

3)创建索引

4)增加数据

5)查询数据

6)修改数据

 7)删除数据

6.kibana安装


1.ELK概述

ELK是什么?

注:主要作用是搭建分布式日志集群平台

-Elasticsearch:负责日志检索和储存

-Logstash:负责日志的收集和分析、处理

-Kibana:负责日志的可视化

-ELK是一整套解决方案,是三个软件产品的首字母缩写,很多公司都在使用,如:Sina、携程、华为、美团等

-这三款软件都是开源软件,通常是配合使用,而且又先后归于Elastic.co公司名下,故被简称为ELK

ELK架构图例

左边是web集群,中间是logstach日志处理,右边是elasticsearch存储日志集群,kibana读取日志并展示出来

ELK的作用

ELK组件在海量日志系统的运维中,可用于解决

-分布式日志数据集中式查询和管理

-系统监控,包含系统硬件和应用各个组件的监控

-故障排查

-安全信息和事件管理

-报表

ELK的web展示

 纵是访问,横是时间

饼图展示

2.Elasticsearch概述

类似于数据库

  • ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful API的Web接口

  • Elasticsearch是用Java开发的,使用Apache许可条款的开源软件,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便

主要特点

-实时分析,文档导向,分布式实时文件存储 ​ -高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards和Replicas)

-接口友好,支持JSON

-没有典型意义的事务

-是一种面向文档的数据库

名词解释

Node: 装有一个ES服务器的节点 Cluster: 有多个Node组成的集群 Document: 一个可被搜索的基础信息单元 Index: 拥有相似特征的文档的集合 Type: 一个索引中可以定义一种或多种类型 Filed: 是ES的最小单位,相当于数据的某一列 Shards: 索引的分片,每一个分片就是一个Shard Replicas: 索引的拷贝

与关系型数据库对比

Relational databaseElasticsearch
Database(库)Index(索引)
Table(表)Type(类型)
Row(行)Document(文档)
Column(列)Field
SchemaMapping
IndexEverything is indexed
SQLQuery DSL
SELECT * FROM table...GET http://...
UPDATE table SETPUT http://...

3.Elasticsearch 安装

由于elk是基于elasticsearch的所以这里先搭建

准备软件包

elasticsearch-6.8.8.rpm 
filebeat-6.8.8-x86 64.rpm 
head.tar.gz
kibana-6.8.8-x86 64.rpm 
logs.jsonl.gz
logstash-6.8.8.rpm
metricbeat-6.8.8-x86 64.rpm

准备服务器

主机IP地址配置
es-0001192.168.1.41最低配置2核2G
es-0002192.168.1.42最低配置2核2G
es-0003192.168.1.43最低配置2核2G
es-0004192.168.1.44最低配置2核2G
es-0005192.168.1.45最低配置2核2G

注:在启动或者安装ES之前,需要先下载JDK 1.7以上的版本,对于2.0来说,要求JDK1.8以上

检查JDK的版本

使用命令:

~]# java -version
~]# echo $JAVA_HOME
# 注:没有安装则安装
~]# yum -y install java-1.8.0-openjdk

查看JDK的版本,正确安装JDK后,就可以下载安装ES了。

下载文件

在网址:www.elastic.co/downloads 中下载最新版本的ES。

这里是用的6.8.8

https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-8-23

单机版安装

配置主机解析

配置 /etc/hosts

192.168.1.41 es-0001

~]# vim /etc/hosts
192.168.1.41    es-0001
~]# yum install -y java-1.8.0-openjdk elasticsearch-6.8.8.rpm
~]# vim /etc/elasticsearch/elasticsearch.yml
55:  network.host: 0.0.0.0  # 监听地址(所有)
​
# 启动elasticsearch
~]# systemctl enable --now elasticsearch
# 查看端口,注意过一分钟再看(因为elasticsearch前半分钟启动,后半分钟如果服务器不适合启动elasticsearch会关闭)
~]# ss -nutlp | grep -E "9200|9300"
tcp    LISTEN     0      128    [::]:9200               [::]:*                   users:(("java",pid=3364,fd=209))
tcp    LISTEN     0      128    [::]:9300               [::]:*                   users:(("java",pid=3364,fd=208))
​
## 访问测试
~]# curl http://192.168.1.41:9200/
{
  "name" : "War Eagle",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.3.4",
    "build_hash" : "e455fd0c13dceca8dbbdbb1665d068ae55dabe3f",
    "build_timestamp" : "2016-06-30T11:24:31Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.0"
  },
  "tagline" : "You Know, for Search"
}

集群安装

注:es-0001 ... es-0005 所有主机,都要执行以下操作

~]# vim /etc/hosts
192.168.1.41    es-0001
192.168.1.42    es-0002
192.168.1.43    es-0003
192.168.1.44    es-0004
192.168.1.45    es-0005
~]# yum install -y java-1.8.0-openjdk elasticsearch-6.8.8.rpm
~]# vim /etc/elasticsearch/elasticsearch.yml
17:  cluster.name: my-es   # 集群的名字
23:  node.name: es-0001    # 本机主机名(hosts文件中解析的)
55:  network.host: 0.0.0.0 # 监听地址(所有)
68:  discovery.zen.ping.unicast.hosts: ["es-0001","es-0002"]         # 创建集群的创始人(直接填hosts文件中解析的)
## 启动这里就需要先启动创始人如("es-0001", "es-0002")
~]# systemctl enable --now elasticsearch
# 最后访问
~]# curl http://192.168.1.41:9200/_cluster/health?pretty
{
  "cluster_name" : "my-es",
  "status" : "green",   # 状态是绿色的则是正常
  "timed_out" : false,
  "number_of_nodes" : 5, # 成员数
  "number_of_data_nodes" : 5,
   ... ...
}

4.插件安装

注:为了方便管理

head插件概述

-它展现ES集群的拓扑结构,并且可以通过它来进行索引 (Index)和节点(Node)级别的操作 ​ -它提供一组针对集群的查询API,并将结果以json和表格形式返回 ​ -它提供一些快捷菜单,用以展现集群的各种状态

Head插件配置管理

插件安装

-插件的本质就是一组网页 ​ -在云主机上安装apache,安装插件(最低配置1CPU1G内存)

下载

 

## 这里可以准备一台服务器或者直接用现有的服务器搭建一台web服务器
~]# unzip elasticsearch-head-master.zip
~]# yum install -y httpd
~]# mkdir/var/www/html/head
~]# systemctl enable--now httpd
~]# cp -r elasticsearch-head /var/www/html/head/

-通过云ELK(负载均衡或直接配公网ip,这里负载均衡要监听80和9200,只需要发布一台,多了不安全)把web服务发布到互联网,通过浏览器访问

此时发现集群健康值为“未连接”这里需要授权

## 给es-0001 访问授权
~]# vim /etc/elasticsearch/elasticsearch.yml
# 配置文件最后追加
http.cors.enabled : true
http.cors.allow-origin : "*"
http.cors.allow-methods : OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers : X-Requested-With,X-Auth-Token,Content-Type,Content-Length
# 重启生效
~]# systemctl restart elasticsearch.service 

注:星代表主机器,系统自定义

第二种安装方法

接下来,我们来安装elasticsearch-head插件

~]# git clone git://github.com/mobz/elasticsearch-head.git
~]# cp -r elasticsearch-head/ /var/www/html/head/

一切安装完毕后,我们打开浏览器来看一下运行结果,在浏览器输入以下地址

~]# curl http://(你的ip)/head/elasticsearch-head

嗯哼?为什么集群健康值为“未连接”?看到下面这个网址中有问题解决方案

img

按照说明,添加文中所说的两个参数,添加后的参数信息如下所示

# es配置文件添加
# 开启跨域访问支持,默认为false
http.cors.enabled: true
# 跨域访问允许的域名地址
http.cors.allow-origin: "*"
# 通过为 cluster.initial_master_nodes 参数设置符合主节点条件的节点的 IP 地址来引导启动集群
cluster.initial_master_nodes: ["node-1"]
​
​
~]$ grep '^[a-z]' config/elasticsearch.yml 
cluster.name: esCluster
path.data: /opt/elasticsearch-6.7.1/datas
path.logs: /opt/elasticsearch-6.7.1/logs
bootstrap.memory_lock: true
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"

修改完后,我们重启elasticsearch,继续刷新下页面,我们就看到了如下界面

至此,我们的elasticsearch-head插件安装完成。

5.Elasticsearch基本操作

1)集群API简单管理

  • Elasticsearch是用http协议访问

  • http请求由三部分组成 -分别是:请求行、消息报头、请求正文 -请求行:Method Request-URIHTTP-Version CRLF解

  • http请求方法 -常用方法GET,POST,HEAD -其他方法OPTIONSPUTDELETETRACE和CONNECT

  • Elasticsearch使用的请求方法 增 ------ PUT 删 ------ DELETE 改 ------ POST 查 ------ GET

  • 与Elasticsearch交互的数据需使用json格式

  • 在linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持多种请求模式,自定义请求头等强大功能,是一款综合工具

  • 使用格式: curl -x 请求方法 http://请求地址 curl -H 自定义请求头 http://请求地址

  • 示例

## 步骤一写一个php
~]# vim info.php 
<pre>
<?PHP
//phpinfo();
//$arr = array("id" => random_int(0000,9999));
foreach (array("REMOTE_ADDR", "REQUEST_METHOD", "HTTP_USER_AGENT", "REQUEST_URI") as $i) {
  $arr[$i] = $_SERVER[$i];
}
if($_SERVER['REQUEST_METHOD']=="POST"){
  $arr += $_POST;
}else{
  $arr += $_GET;
}
print_R($arr);
print_R("php_host: \t".gethostname()."\n");
$n = 0;
$start = 1;
$end = isset($_GET["id"])? $_GET["id"] : 10000 ;
for($num = $start; $num <= $end; $num++) {
    if ( $num == 1 ) continue;
    for ($i = 2; $i <= sqrt($num); $i++) {
        if ($num % $i == 0) continue 2;
    }
    $n++;
}
print_R($n."\n");
?>
# 步骤二写一个静态html
~]# vim info.html 
<html>
  <marquee  behavior="alternate">
      <font size="12px" color=#00ff00>Hello World</font>
  </marquee>
</html>
# 步骤三访问
# 安装php动态解析,并重启apapche
~]# yum -y install php
~]# systemtl restart httpd
~]# curl http://172.17.0.51/info.php
~]# curl -XPOST http://172.17.0.51/info.php
~]# curl -XDELETE http://172.17.0.51/info.php
​
# 静态访问
~]# curl  http://172.17.0.51/info.html
<html>
  <marquee  behavior="alternate">
      <font size="12px" color=#00ff00>Hello World</font>
  </marquee>
</html>

~]# curl -i -v -H "Accept-Encoding:gzip" http://172.17.0.51/info.html
# 查看返回请求信息
​
## 把访问的内容压缩(默认不开压缩配置,如果要用则需开启,所以只能导入文件则可避开)
~]# curl -H "Accept-Encoding:gzip"   http://www.baidu.com -o f2
# 注:此时查看是乱码,所以需要如下操作
~]# cat f2 | gzip -d -

2)查询_cat方法

  • _cat关键字用来查询集群状态,节点信息等

    -显示详细信息(?v),

-显示帮助信息(?help)

# 查询支持的关键字
~]# curl -XGET http://es-0001:9200/_cat/
​
# 查具体的信息
~]# curl -XGET http://es-0001:9200/_cat/master
​
# 显示详细信息 ?v
~]# curl -XGET http://es-0001:9200/_cat/master?v
​
# 显示帮助信息 ?help
~]# curl -XGET http://es-0001:9200/_cat/master?help
​
# 从命令行看集群
]# curl -XGET http://172.17.0.51:9200/_cat/nodes
​
# 从web页面看集群
~]# http://172.17.0.51/head/elasticsearch-head/

3)创建索引

指定索引的名称,指定分片数量,指定副本数量

创建索引使用 PUT 方法,创建完成以后通过 head 插件验证

注:分片数量尽量和服务器对应

~]# curl -XPUT -H "Content-Type: application/json" http://es-0001:9200/ceshi -d \
'{
    "settings":{
       "index":{
          "number_of_shards": 4, 
          "number_of_replicas": 1
       }
    }
}'  (回车)
-XPUT:    # 指定请求头,
"Content-Type: application/json"  # 格式为json
http://es-0001:9200/ceshi : # 要创建的索引名称http://(任意哪台机器):9200/(索引名)
-d    # 指定数据格式(这里定义了json)
"settings" # 设置
"index"   # 索引
"number_of_shards"    # 数据分片个数
 "number_of_replicas" # 副本数

查看,可以看出已经把数据存储随机分配到四个服务上了,另外设置了一个副本(也就是备份),4分片就是分成4份分别存放;1副本就是备份一份,也就是一共两份,此时就可以损坏一台服务,2就是可以损坏两块

 删除索引

 命令行删除

~]# curl -XDELETE http://172.17.0.51:9200/ceshi4 

完成之后恢复

4)增加数据

~]# curl -XPUT -H "Content-Type: application/json" http://es-0001:9200/ceshi/teacher/1 -d \
'{
  "职业": "诗人",
  "名字": "李白",
  "称号": "诗仙",
  "年代": "唐"
}' 
-XPUT   # 写入数据
-H "Content-Type: application/json"  # 指定json格式输入
http://es-0001:9200/(索引)/(类型)/id  # 指定服务的索引,类型,id 
-d    # 指定数据格式(这里定义了json)

5)查询数据

# 命令查看
~]# curl -XGET http://172.17.0.51:9200/ceshi/teacher/1?pretty
{
  "_index" : "ceshi",
  "_type" : "teacher",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "职业" : "诗人",
    "名字" : "李白",
    "称号" : "诗仙",
    "年代" : "唐"
  }
}
?pretty # 竖起来看  ?表示传参

web查看

6)修改数据

~]# curl -XPOST -H "Content-Type: application/json" http://es-0001:9200/ceshi/teacher/1/_update -d '{ "doc": {"年代":"公元701"}}'
-XPOST  # 修改数据
-H "Content-Type: application/json"  # 指定json格式输入
http://es-0001:9200/(索引)/(类型)/id  # 指定服务的索引,类型,id
-d    # 指定数据格式(这里定义了json)
"doc" # 文档
{"年代":"公元701"}}' # 修改内容

web页面查看

 7)删除数据

# 删除一条
~]# curl -XDELETE http://es-0001:9200/ceshi/teacher/1
​
# 删除索引
~]# curl -XDELETE http://es-0001:9200/ceshi
​
# 注:删除不需要写json格式

6.kibana安装

准备主机(IP任意)

主机IP地址配置
kibana192.168.1.46最低配置1核1G

安装kibana

第一步先下载:

https://www.elastic.co/cn/downloads/past-releases#kibana

~]# vim /etc/hosts 
192.168.1.41 es-0001 
192.168.1.42 es-0002 
192.168.1.43 es-0003 
192.168.1.44 es-0004 
192.168.1.45 es-0005 
192.168.1.46 kibana 
~]# yum install -y kibana-6.8.8-x86_64.rpm 
~]# vim /etc/kibana/kibana.yml 
02 server.port: 5601      # 打开端口 
07 server.host: "0.0.0.0" # 监听服务器(默认) 
28 elasticsearch.hosts: ["http://es-0002:9200", "http://es-0003:9200"]  # elasticsearch的地址(设置高可用,所以要设置两台,第一台是elasticsearch的管理节点) 
37 kibana.index: ".kibana"  # 开启默认索引 
40 kibana.defaultAppId: "home" # 表示默认首页: 
113 i18n.locale: "zh-CN"   # 设置中文格式 
~]# systemctl enable --now kibana

绑定弹性公网IP,通过 WEB 浏览器验证

导入日志数据

随便搞点日志测试 logs.jsonl.gz 到跳板机

~]# gunzip logs.jsonl.gz 
~]# curl -XPOST -H "Content-Type: application/json" http://172.17.0.51:9200/_bulk --data-binary @logs.jsonl 

查看,首页点击

 

使用

选择时间搓挫

 创建索引就是告诉kibana我们要用哪个数据去读取分析

存放位置如下图:

但是发现并没有数据,这里是因为默认只有15分钟

 

查看日志时间

 选择范围查看

 用鼠标指定查看

 制作可视化

 拉到最低下,选择饼图

点击刚刚自己写的索引

 进入之后就可以看见一个圈,但是里面的信息看不到,这里就需要点击分片拆分了

选择词

选择字段(源地址)

 选择完之后点击开关按钮

 再次拆分

 

 

词是操作系统的意思

按照浏览器再拆

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值