/*目录*/

ELK

ELK定义

Elasticsearch:负责日志检索和储存

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

Kibana:负责日志的可视化

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

使用场景

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

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

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

– 故障排查

– 安全信息和事件管理

– 报表功能

Elasticsearch

Elastic官方文档

Elasticsearch 是一个开源的搜索引擎,建立在全文搜索引擎库 Apache Lucene 基础之上,用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。

主要特点:

– 实时分析

– 分布式实时文件存储,并将每一个字段都编入索引

– 文档导向,所有的对象全部是文档

– 高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards 和 Replicas)

– 接口友好,支持JSON

– Elasticsearch没有典型意义的事务

– Elasticsearch是一种面向文档的数据库

– Elasticsearch没有提供授权和认证特性

ES集群

1.相关概念名词:

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

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

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

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

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

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

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

– Replicas: 索引的拷贝

2.ES为什么要实现集群

ES集群搭建

在单台ES服务器节点上,随着业务量的发展索引文件慢慢增多,会影响到效率和内存存储问题等。

我们可以采用ES集群,将单个索引的分片到多个不同分布式物理机器上存储,从而可以实现高可用、容错性等。

ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负载能力。

3.ES常用插件

head插件

它展现ES集群的拓扑结构,并且可以通过它来进行索引(Index)和节点(Node)级别的操作

它提供一组针对集群的查询API,并将结果以json和表格形式返回

它提供一些快捷菜单,用以展现集群的各种状态

kopf插件

是一个ElasticSearch的管理工具,它提供了对ES集群操作的API

bigdesk插件

是elasticsearch的一个集群监控工具,可以通过它来查看es集群的各种状态,如:cpu、内存使用情况,索引数据、搜索情况,http连接数等

map 映射

mapping:映射

– 创建索引的时候,可以预先定义字段的类型及相关属性

– 作用:这样会让索引建立得更加的细致和完善

 分类:静态映射和动态映射

– 动态映射:自动根据数据进行相应的映射

– 静态映射:自定义字段映射数据类型

 Kibana安装与配置

kibana用户手册

kibana是什么

– 数据可视化平台工具

特点:

– 灵活的分析和可视化平台

– 实时总结流量和数据的图表

– 为不同的用户显示直观的界面

– 即时分享和嵌入的仪表板

 安装

安装和配置参考用户手册

kibana.yml的配置

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://192.168.1.51:9200"    
kibana.index: ".kibana"                //默认索引的名称
kibana.defaultAppId: "discover"            //默认页面
elasticsearch.pingTimeout: 1500
elasticsearch.requestTimeout: 30000
elasticsearch.startupTimeout: 5000

除elasticsearch.url需要配置为我们ES集群的地址之外,其他保持默认值

 web访问kibana    ---      http://192.168.1.56:5601/

kibana 管理界面使用教程

Logstash是什么

是一个数据采集、加工处理以及传输的工具

– 所有类型的数据集中处理

– 不同模式和格式数据的正常化

– 自定义日志格式的迅速扩展

– 为自定义数据源轻松添加插件

安装

 logstash官方文档

Logstash依赖Java环境,需要安装java-1.8.0-openjdk

Logstash没有默认的配置文件,需要手动配置

Logstash工作结构:
{ 数据源 } ==>
    input { } ==>             //获取数据
        filter { } ==>            //处理数据
            output { } ==>            //存储,输出数据
                    { ES }

Logstash类型及条件判断

Logstash里面的类型

– 布尔值类型: ssl_enable => true

– 字节类型:bytes => "1MiB"

– 字符串类型: name => "xkops"

– 数值类型: port => 22

– 数组: match => ["datetime","UNIX"]

– 哈希: options => {k => "v",k2 => "v2"}

– 编码解码: codec => "json"

– 路径: file_path => "/tmp/filename"

– 注释: #

Logstash条件判断

等于: ==
不等于: !=
小于: <
大于: >
小于等于: <=
大于等于: >=
匹配正则: =~
不匹配正则: !~
包含: in
不包含: not in
与: and
或: or
非与: nand
非或: xor
复合表达式: ()
取反符合:!()

Logstash的第一个配置文件:/etc/logstash/logstash.conf

input{
stdin{}    //标准输入
}
filter{ }
output{
stdout{}    //标准输出
}
# logstash -f logstash.conf   //启动并验证

Logstash插件

上页的配置文件使用了logstash-input-stdin和logstash-output-stdout两个插件, Logstash还有filter和codec类插件,查看插件的方式是

# /opt/logstash/bin/logstash-plugin list
插件地址

codec类插件

– 常用的插件:plain、json、json_lines、rubydebug、multiline等

– 使用刚刚的例子,这次输入json数据

– 设置输入源的codec是json,在输入的时候选择rubydebug

input{
    stdin{ codec => "json" }
}
filter{     }
output{
    stdout{ codec => "rubydebug" }
}

input file插件

file{
path => [“/tmp/a.log”, “/tmp/b.log”]            //要读取数据的文件,可以同时监控多个文件
sincedb_path => "/var/lib/logstash/sincedb-access"   //指针文件,记录读取文件的位置
start_position => "beginning"               //指定默认行为,配置第一次读取文件从什么地方开始              
type => 'filelog'                    //打标签
}

filter grok插件

– 解析各种非结构化的日志数据插件

– grok使用正则表达式把飞结构化的数据结构化

– 在分组匹配,正则表达式需要根据具体数据结构编写

– 虽然编写困难,但适用性极广

grok{
match => ["message", "%{IP:ip}, (?<key>reg) " ]
}

正则宏表达式模板:/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns/grok-patterns

output ES插件

if [type] == "filelog"{
elasticsearch {
hosts => ["192.168.1.51:9200", "192.168.1.52:9200"]     //主机地址
index => "weblog"           //索引名称
flush_size => 2000        //达到一定大小写入数据库
idle_flush_time => 10        //达到一定时间写入数据库
}}

调试成功后,把数据写入ES集群

input filebeats插件

这个插件主要用来接收beats类软件发送过来的数据,由于logstash依赖JAVA环境,而且占用资源非常大,因此会使用更轻量的filebeat替代

beats {
port => 5044
}

filebeat安装配置(web服务器)

filebeat安装与配置

使用rpm安装filebeat  # yum –y install filebeat
修改配置文件/etc/filebeat/filebeat.yml
设置开机运行# systemctl enable filebeat
开启服务 systemctl start filebeat

修改配置文件/etc/filebeat/filebeat.yml

paths:

- /root/logs.jsonl
  document_type: weblog
  ... ...
  paths:
- /root/accounts.json
  document_type: account
  output:
  logstash:
  hosts: ["192.168.1.57:5044"]

 



 

posted @ 2020-07-21 11:09  嘟嘟噜~  阅读(215)  评论(0编辑  收藏  举报