ELK部署

ELK部署

ELK组成

  • Elasticsearch: 负责日志检索和储存(数据库)

    • Node: 装有一个ES服务器的节点

    • Cluster: 有多个Node组成的集群

    • Index: 拥有相似特征的文档的集合

    • Type: 一个索引中可以定义一种或多种类型

    • Document: 一个可被搜索的基础信息单元

    • Filed: 是ES的最小单位,相当于数据的某一列

    • Shards: 索引的分片,每一个分片就是一个Shard

    • Replicas: 索引的拷贝

  • Logstash: 负责日志的收集和分析、处理 (程序)

    • 类型
      • 布尔值类型
      • 字节类型
      • 字符串类型
      • 数值类型
      • 数组
      • 哈希(键值对)
      • 注释 #
    • 逻辑判断
      • 包含: in
      • 不包含: notin
      • 与: and
      • 或:or
      • 非与: nand
      • 非或: xor
  • Kibana: 负责日志的可视化 (Web服务器网页展示)

ELK作用

  • 分布式日志数据集中式查询和管理
  • 系统监控,包含系统硬件和应用各个组件的监控
  • 故障排查
  • 安全信息和事件管理
  • 报表功能

ELK安装软件

  • CentOS7-1804.iso (相关依赖)
  • elasticsearch-2.3.4.rpm
  • filebeat-1.2.3-x86_64.rpm
  • kibana-4.5.2-1.x86_64.rpm
  • logstash-2.3.4-1.noarch.rpm

前置配置

5台节点机 1.41~45

**插曲: ssh到1.41上 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! **

#解决   之前机器删掉了
for i in {1..5}
do
	ssh-kengen -R 192.168.1.4$i
done

单机安装

#1.41
vim /etc/hosts  #添加解析
===============================
192.168.1.41  xxx-0001  #主机名
======================================
yum -y install java-1.8.0-openjdk elasticsearch  #安装JDK 和 elast Java开发的


vim /etc/elasticsearch/elasticsearch.yml
=============================
network.host: 0.0.0.0              #54行  监听所有地址
====================================

systemctl enable --now elasticsearch.service  #启动并开机自启

#查看下
ss -nutlp | grep 9200
tcp    LISTEN     0      50     [::]:9200               [::]:*                   users:(("java",pid=1267,fd=93))


#访问测试
curl http://localhost:9200/
{
  "name" : "Blur",
  "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"
}

#OK

Elasticsearch集群安装

#proxy  跳板机
#剧本安装

vim inventory
======================
[es]
192.168.1.[41:45]
========================
#定义角色
ansible-galaxy init roles/es

#任务
vim roles/es/tasks/main.yaml
============================
---
# tasks file for roles/es
- name: 发送hosts
  copy: src=hosts  dest=/etc/hosts force=yes
- name:  安装el..
  yum: name=java-1.8.0-openjdk
- yum: name=elasticsearch
- template: src=elasticsearch.yml  dest=/etc/elasticsearch/elasticsearch.yml force=yes
- name: 启动服务
  service: name=elasticsearch enabled=yes state=restarted
===================================================================

vim roles/es/files/hosts   #主机名解析  应该用魔法变量获取的   先用静态的
====================================
::1     localhost       localhost.localdomain   localhost6      localhost6.localdomain6
127.0.0.1       localhost       localhost.localdomain   localhost4      localhost4.localdomain4
127.0.0.1       ecs-host        ecs-host

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
=========================================

vim roles/es/template/elasticsearch.yml #定义配置文件  要顶格 配置文件是yaml格式
==========================================
cluster.name: my-es   #17   配置集群名字
node.name: {{ansible_hostname}}  #23 当前主机名字
network.host: 0.0.0.0    #54  监听所有地址
discovery.zen.ping.unicast.hosts: ["es-0001","es-0002"]  #自动发现 不用写全
==========================================================================


vim  es_install.yml  #安装
========================
- hosts: es
  roles:
    - es
=============================

ansible-playbook   es_install.yml   #执行即可 

测试 访问任意节点的9200端口 /_cluster/health?pretty

#访问测试
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,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

#elasticsearch集群OK

可以发现测试集群命令还是比较麻烦的 所以可以安装插件帮助

插件

插件命令在 /usr/share/elasticsearch/bin/plugin

命令为:

  • plugin install 安装

  • plugin remove 删除

  • plugin list 查看

  • kopf插件

    • 是一个Elasticsearch的管理工具
    • 它提供了对ES集群操作的API
  • bigdesk插件

    • 是Elasticsearch的一个集群监控工具
    • 可以通过它来查看es集群的各种状态,如:cpu、内存使用情况、http连接数
  • head插件

    • 展现ES集群的拓扑结构,可以通过它来进行索引Index和节点Node级别的操作
    • 提供一组针对集群的API,并以Json和表格形式返回
    • 它提供一些快捷菜单,用以展现集群的各种状态
#es-0005测试

#安装三个插件   必须是url路径
/usr/share/elasticsearch/bin/plugin install file:///root/elasticsearch-head-master.zip

/usr/share/elasticsearch/bin/plugin install file:///root/elasticsearch-kopf-master.zip

/usr/share/elasticsearch/bin/plugin install file:///root/bigdesk-master.zip


#查看安装的插件
/usr/share/elasticsearch/bin/plugin list
Installed plugins in /usr/share/elasticsearch/plugins:
    - bigdesk
    - kopf
    - head

浏览器访问查看

绑定了ELB 监听后端服务器的9200端口

http://ip:9200/_plugin/head

在这里插入图片描述

节点信息情况 JSON格式显示
在这里插入图片描述

http://ip:9200/_plugin/kopf 控制集群的API

在这里插入图片描述

带星的选举出的

http://ip:9200/_plugin/bigdesk 监控集群信息 图表
在这里插入图片描述


Elasticsearch管理 (增删改查)

使用json格式进行交互

  • PUT -------------- 增
  • DELETE -------------- 删
  • POST ------------- 改
  • GET --------------- 查
#查看el集群主节点信息
curl http://192.168.1.45:9200/_cat/master?v
id                     host         ip           node
1nicvZBETp2h7wivUHGIFA 192.168.1.44 192.168.1.44 es-0004


#查看标签描述
curl http://192.168.1.45:9200/_cat/master?help
id   |   | node id
host | h | host name
ip   |   | ip address
node | n | node name

创建索引

#es-0001
curl -XPUT  http://es-0001:9200/mytest -d \  #X指定请求头 /mytest创建index为mytest  
'{
    "settings": {
       "index": {
           "number_of_shards": 5,               #指定分片为5  有5个节点
           "number_of_replicas": 1              #指定副本数为1
       }
    }
 }'

{"acknowledged":true}     #成功添加

验证

在这里插入图片描述

**索引被分成了0~4五份 总共两份 所以上面的副本数为1 **

索引源数据框深色,复制数据浅


增加数据

curl -XPUT http://es-0001:9200/mytest/fruits/1 -d \   #指定索引  类型  id
'{
    "品种": "西瓜",
    "重量": "8斤"
}'

curl http://es-0001:9200/mytest/fruits/2 -d \
'{
   "品种": "香蕉",
   "描述": "很贵的香蕉"
}'

head插件查看

在这里插入图片描述

命令行查看

curl -XGET http://es-0001:9200/mytest/fruits/1?pretty
{
  "_index" : "mytest",
  "_type" : "fruits",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "品种" : "西瓜",
    "重量" : "8斤"
  }
}

数据修改

curl -XPOST  http://es-0001:9200/mytest/fruits/1/_update -d \
'{"doc": { "描述": "很便宜的西瓜"}}'
#修改成功
{"_index":"mytest","_type":"fruits","_id":"1","_version":2,"_shards":{"total":2,"successful":2,"failed":0}}


#查看
#head插件直接查看

#或者
curl -xGET http://es-0001:9200/mytest/fruits/1?pretty
{
  "_index" : "mytest",
  "_type" : "fruits",
  "_id" : "1",
  "_version" : 2,
  "found" : true,
  "_source" : {
    "品种" : "西瓜",
    "重量" : "8斤",
    "描述" : "很便宜的西瓜"   #描述信息出来了
  }
}

删除数据

#删除一条
curl -XDELETE http://es-0001:9200/mytest/fruits/1

#删除索引
curl -XDELETE http://es-0001:9200/mytest


#删除索引后直接添加数据  可以  索引又被创建了

Kibana安装

192.168.1.46

vim /etc/hosts
=======================
::1     localhost       localhost.localdomain   localhost6      localhost6.localdomain6
127.0.0.1       localhost       localhost.localdomain   localhost4      localhost4.localdomain4
127.0.0.1       ecs-host        ecs-host

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
==================================

#配置解析     数据存储在el里面 

yum install -y kibana   #安装
vim   /opt/kibana/config/kibana.yml  #修改配置文件 yaml格式
========================================
server.port: 5601     #2   服务端口
server.host: "0.0.0.0"  #5 监听所有地址
elasticsearch.usr: "http://es-0001:9200" #15 el地址
kibana.index: ".kibana"   #23 索引
kibana.defaultAppId: "discover"  #26 默认首页
============================================

systemctl enable --now kibana

添加ELB监听5601

访问ip:5601/status 查看status

在这里插入图片描述

状态OK


导入数据测试

culr -XPUT http://es-0001:9200/_bulk --data-binary @logs.jsonl #指定json格式日志文件 logs.jsonl

head插件查看

在这里插入图片描述

导入到数据库中成功

在kibana中创建索引 @timestamp

修改时间戳

在这里插入图片描述

饼图制作

在这里插入图片描述

Field是日志里面的

Add可以在上一次基础上再次选择


Logstash安装

192.168.1.47

vim /etc/hosts
=======================
::1     localhost       localhost.localdomain   localhost6      localhost6.localdomain6
127.0.0.1       localhost       localhost.localdomain   localhost4      localhost4.localdomain4
127.0.0.1       ecs-host        ecs-host

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.47 logstash
============================

#安装JDK和logstash
yum -y install java-1.8.0-openjdk logstash

#创建配置文件    logstash配置需要手写
touch /etc/logstash/logstash.conf    

logstash.conf

  • input{数据输入}

    input {
    	stdin {}
    }
    
  • filter{过滤规则}

    filter { 
    }
    
  • output{数据导出}

    output {
    	stdout {}
    }
    

继续

vim /etc/logstash/logstash.conf
===================================
input {
	stdin {}
}
filter {}
output {
	stdout {}
}
===========================================

#测试      命令-f指定配置文件  可以通过--help查看帮助
/opt/logstash/bin/logstash -f /etc/logstash/logstash.conf

abc        #输入abc
2021-03-16T07:49:00.612Z logstash abc    #输出abc   因为没写过滤

Logstash插件

官方手册地址

https://www.elastic.co/guide/en/logstashcurrent/index.html

#查看插件
/opt/logstash/bin/logstash-plugin list
.....
logstash-filter-xml
logstash-input-beats
logstash-input-couchdb_changes
logstash-input-elasticsearch
logstash-input-eventlog
....

#修改配置文件输入输出
vim /etc/logstash/logstash.conf
==============================
input {
	stdin { codec => "json" }
}
filter {}
output {
	stdout { codec => "json" }
}
=================================

/opt/logstash/bin/logstash -f /etc/logstash/logstash.conf
{"a": "test","b": "var"}   #输入
{"a":"test","b":"var","@version":"1","@timestamp":"2021-03-16T08:05:43.113Z","host":"logstash"}
#输出   json格式时间戳 主机


#可以设置输出为rubydebug  竖行输出 方便查看

配置

vim /etc/logstash/logstash.conf
=========================================
input {
	stdin { codec => "json" }
	file {
		path => ["/tmp/test.log"]  #指定那个文件获取,数组 可以多个路径
		type => "apachelog"  #打标签 提供一个字符串标签
		#定义记录读取文件位置的文件的路径,不定义会生成在家目录下
		sincedb_path => "/var/lib/logstash/sincedb-access"
		#读取新文件从头还是尾开始读取 [beginning | end]
		start_position => "beginning"
	}
	file {
		path => ["/tmp/check.log"]
		type => "nginxlog"
		#设置成/dev/null   方便测试
		sincedb_path => "/dev/null" 
	}
}
filter {
	grok {  #grok  正则模块
		match => {          #匹配IPxxx.xxx.xxx.xxx
			"message" => "(?<client_ip>(25[0-5]|2[0-4]\d|1?\d?\d.){3(25[0-5]|2[0-4]\d|1?\d?\d))"
			#最后输出会有 "client_ip": xxx.xxx.xxx.xxx
		}
	}
}
output {
	stdout { codec => "json" }
}
=======================================================

filebeat安装

在web服务器上 收集数据给logstash处理 5044端口

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值