ELK---日志分析系统
ELK就是一套完整的日志分析系统
ELK=Logstash+Elasticsearch+Kibana
统一官网https://www.elastic.co/products
ELK模块说明
Logstash
作用:用于处理传入的日志,负责收集、过滤和写出日志
Logstash分为三个组件input,filter,output
输入input
常用file,redis,kafka
示例:
input
file {
path => ['/var/log/neutron/dhcp-agent.log'] //日志路径
tags => ['openstack','oslofmt', 'neutron', 'neutron-dhcp-agent']
start_position => "beginning"
type => "neutron"
codec => multiline { //合并行
pattern => "^%{OPENSTACK_TRACE_BLOCK}" //自定义变量
what => "previous" //上一行合并,next下一行合并
}
}
input {
kafka {
zk_connect => "server:2181"
topic_id => "nova"
codec =>json
reset_beginning => false
consumer_threads => 2
decorate_events =>true
}
}
过滤filter
常用Date时间处理、Grok正则捕获、GeoIP地址查询
示例:
Fileter{
grok {
match => { "message" => "%{OPENSTACK_NORMAL}%{GREEDYDATA:message}"}
overwrite => ["message"] //重写message
}
}
}
Grok内置变量
可以自定义变量
1.自定义变量路径
/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.2/patterns
2. 自定义变量存放在 /opt/logstash/patterns
在配置中添加
filter { grok { patterns_dir => ["/opt/logstash/patterns "] match => { "message" => "%{OPENSTACK_NORMAL}%{GREEDYDATA:message}"}} } } |
OPENSTACK_NORMAL ^%{TIMESTAMP_ISO8601:logdate} %{NUMBER:pid} %{LOGLEVEL:loglevel} %{NOTSPACE:module}%{SPACE}
2016-04-27 15:19:14.455 4392 DEBUG nova.api.openstack.wsgi [req-fde66cf0-6d28-4b0d-8671-bce33bb48665 0f288a5b5f19437db670ef94269bfd36 629fb63dd82e46fa937accc99d417059 - - -] Action: 'create', calling method: <bound methodServersController.createof<nova.api.openstack.compute.servers.ServersController object at 0x7c61d10>>, body: {"server": {"name": "test11", "imageRef": "c9620d95-fc3a-4090-b9e8-6c3909cc556e", "flavorRef": "100000000", "max_count": 1, "min_count": 1, "networks": [{"uuid": "e18f583f-c8cf-433a-8095-315712525ecd"}]}} _process_stack /usr/lib/python2.7/site-packages/nova/api/openstack/wsgi.py:789
output
常用Elasticserch、保存为文件、输出到HDFS、标准输出
示例:
output {
elasticsearch {
hosts=>["server:9200"] //老版本为 host 新版本 hosts
document_type =>"%{type}"
workers => 2
index => "logstash-%{type}-%{+YYYY.MM.dd}" //索引名称
}
}
output {
kafka {
bootstrap_servers => "server:9092"
topic_id => "nova"
compression_type => "snappy"
}
}
elasticsearch
用于将导入数据建立动态倒排索引,建立磁盘缓存,提供磁盘同步控制,达到准实时检索
DB 和 elasticsearch对比
Index索引
索引相当于数据库的一个库
Type
类型相当于数据库的一个表
Document
文档相当于数据库的一行数据
Filed
属性相当于数据库的一个字段
Mapping
映射理解为一种方案
查询方式
1. query-string
curl -XGET server:9200/logstash-nova-2016.04.27/nova/_search?q=pid.raw:1524'
2.DSL (常用)
curl -XGET server:9200/logstash-nova-2016.04.27/nova/_search -d '{
"query" : {
"term" : { "pid.raw " : "1524" }
}
}
GET 查询
POST 更新
PUT 创建
DELETE删除
HEAD获取基础信息
集群(Cluster)
ES集群是一个或多个节点的集合,它们共同存储了整个数据集,并提供了联合索引以及可跨所有节点的搜索能力。
ES集群需要修改配置文件
config/elasticsearch.yml
每台es机器的配置文件中 cluster.name相同,node.name不一致
ES集群内部实现HA,避免单点故障
集群内部自动选择一个主节点,监听node节点状态,如果发生故障提取节点副本分片,均衡分发给其他节点。
节点(Node)
运行了单个实例的ES主机称为节点,它是集群的一个成员,可以存储数据、参与集群索引及搜索操作。
分片(shard)
分片存储索引,一个索引可能会存在多个分片上。
Shard有两种类型:primary和replica,即主shard及副本shard。
Primary shard创建完成,其Primary shard的数量将不可更改,默认是5
Replica shard是Primary Shard的副本,用于冗余数据及提高搜索性能,默认是1。
说明:
Elasticsearch优化方案
- 使用SSD 在elasticsearch.yml配置数据存放位置
path.data: /mnt/data/elasticsearch #数据存在挂载硬盘 进行配置
- 根据索引数量,调整分片数量
- 根据实际情况调整内存
- Elasticsearch mapping调整,有些默认设置可以禁用
Index中默认会有_all的域,这个会给查询带来方便,但是会增加索引时间和索引尺寸
"_all" : {"enabled" : false}
执行语句
PUT my_index
{
"mappings": {
"my_type": {
"_all": {
"enabled": false
}
}
}
}
Elasticsearch API说明
文档API: 提供对文档的增删改查操作
搜索API: 提供对文档进行某个字段的查询
索引API: 提供对索引进行操作
查看API: 按照更直观的形式返回数据,更适用于控制台请求展示
集群API: 对集群进行查看和操作的API
查询语法可以参考官网进行学习:
https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
安装elasticsearch head插件管理es
Kibana
用于获得elasticsearch的数据进行展示
应用
创建虚拟机的日志收集
Logstash 配置文件
input { file { path => ['/var/log/nova/nova-api.log'] tags => ['openstack','oslofmt', 'oslofmt', 'nova', 'nova-api'] start_position => "beginning" type => "nova" } file { path => ['/var/log/nova/nova-conductor.log'] tags => ['openstack', 'oslofmt', 'nova', 'nova-conductor'] start_position => "beginning" type => "nova" } file { path => ['/var/log/nova/nova-scheduler.log'] tags => ['openstack', 'oslofmt', 'nova', 'nova-scheduler'] start_position => "beginning" type => "nova" } file { path => ['/var/log/nova/nova-compute.log'] tags => ['openstack', 'oslofmt', 'nova', 'nova-compute'] start_position => "beginning" type => "nova" } file { path => ['/var/log/neutron/server.log'] tags => ['openstack','oslofmt', 'neutron', 'neutron-server'] start_position => "beginning" type => "neutron" } } filter { mutate { gsub => ['path', "/.+/", ""] } if "oslofmt" in [tags] { grok { match => { "message" => "%{OPENSTACK_NORMAL}%{GREEDYDATA:message}"} overwrite => ["message"] } } if "Traceback" in [message] or "File" in [message] or "RuntimeERROR" in [message] or "Command" in [message] or "Exit" in [message] or "Stdin" in [message]{ multiline { pattern => "^%{GREEDYDATA}" what => "previous" } } date { match => ["logdate", "yyyy-MM-dd HH:mm:ss.SSS", "EEE MMM dd HH:mm:ss.SSSSSS yyyy", "dd/MMM/yyyy:HH:mm:ss", "dd-MMM-yyyy::HH:mm:ss", "MMM dd HH:mm:ss", "MMM dd HH:mm:ss", "yyyy-MM-dd HH:mm:ss.SSS" ] } if [loglevel] in ["WARNING","WARN","TRACE", "ERROR"] { mutate { add_tag => ["something_wrong"] } } } output { stdout { codec => rubydebug } elasticsearch {hosts=>["server:9200"] document_type =>"%{type}" workers => 16 index => "logstash-%{type}-%{+YYYY.MM.dd}" } } |
Elasticsearch
按照模块query DSL 语句
nova-api
Curl-XGET"http://192.168.44.128:9200/logstash-nova-2016.04.27/nova/_search?pretty=true" -d '{"query": {"bool": {"must": [{"term":{"path.raw":"nova-api.log"}},{"query_string": {"default_field": "_all","query": "fde66cf0 783b26ba"}}, {"range": {"logdate.raw": {"gt": "2016-04-27 15:19:14.455","lt": "2016-04-27 15:19:21.999"} }}] } } }' |
nova-scheduler
curl-XGET"http://192.168.44.128:9200/logstash-nova-2016.04.27/nova/_search?pretty=true" -d '{"query": {"bool": {"must": [{"term": {"path.raw":"nova-scheduler.log"}},{"query_string": {"default_field": "_all","query": "fde66cf0"}}], "must_not": [ ],"should": [ ] } } }' |
nova-conductor
curl-XGET"http://192.168.44.128:9200/logstash-nova-2016.04.27/nova/_search?pretty=true" -d '{"query": {"bool": {"must": [{"term": {"path.raw":"nova.conductor.log"}}, {"query_string":{"default_field":"_all","query":"fde66cf0"}}], "must_not": [ ], "should": [ ] } } }' |
nova-compute
curl-XGET"http://192.168.44.128:9200/logstash-nova-2016.04.27/nova/_search?pretty=true" -d '{"query": {"bool": {"must": [{"term": {"path.raw":"nova-compute.log"}}, {"query_string": {"default_field":"_all","query":"fde66cf0"}}, {"range": {"logdate.raw":{"gt":"2016-04-2715:19:10.000","lt": "2016-04-2715:25:07.981"}}}], "must_not": [{"term":{"module.raw":"oslo_service.periodic_task"}}, {"term":{"module.raw":"oslo_concurrency.lockutils"}}, {"term": {"module.raw": "keystoneclient.session"}}], "should": [ ] } } }' |
server.log
curl-XGET"http://192.168.44.128:9200/logstash-neutron-2016.04.27/neutron/_search?pretty=true" -d '{"query": {"bool": {"must": [{"term": {"path.raw": "server.log"}}, {"query_string":{"default_field":"_all","query":"783b26ba ed1db9be"}}, {"range":{"logdate.raw":{"gt":"2016-04-2715:19:10.000","lt": "2016-04-27 15:21:00.000"} } }] } } }' |
ELK---日志分析系统的更多相关文章
- ELK日志分析系统简单部署
1.传统日志分析系统: 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安 ...
- Rsyslog+ELK日志分析系统
转自:https://www.cnblogs.com/itworks/p/7272740.html Rsyslog+ELK日志分析系统搭建总结1.0(测试环境) 因为工作需求,最近在搭建日志分析系统, ...
- 十分钟搭建和使用ELK日志分析系统
前言 为满足研发可视化查看测试环境日志的目的,准备采用EK+filebeat实现日志可视化(ElasticSearch+Kibana+Filebeat).题目为“十分钟搭建和使用ELK日志分析系统”听 ...
- ELK日志分析系统-Logstack
ELK日志分析系统 作者:Danbo 2016-*-* 本文是学习笔记,参考ELK Stack中文指南,链接:https://www.gitbook.com/book/chenryn/kibana-g ...
- elk 日志分析系统Logstash+ElasticSearch+Kibana4
elk 日志分析系统 Logstash+ElasticSearch+Kibana4 logstash 管理日志和事件的工具 ElasticSearch 搜索 Kibana4 功能强大的数据显示clie ...
- 《ElasticSearch6.x实战教程》之实战ELK日志分析系统、多数据源同步
第十章-实战:ELK日志分析系统 ElasticSearch.Logstash.Kibana简称ELK系统,主要用于日志的收集与分析. 一个完整的大型分布式系统,会有很多与业务不相关的系统,其中日志系 ...
- Docker笔记(十):使用Docker来搭建一套ELK日志分析系统
一段时间没关注ELK(elasticsearch —— 搜索引擎,可用于存储.索引日志, logstash —— 可用于日志传输.转换,kibana —— WebUI,将日志可视化),发现最新版已到7 ...
- ELK 日志分析系统的部署
一.ELK简介 ElasticSearch介绍Elasticsearch是一个基于Lucene的搜索服务器. 它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口. Elasti ...
- Rsyslog+ELK日志分析系统搭建总结1.0(测试环境)
因为工作需求,最近在搭建日志分析系统,这里主要搭建的是系统日志分析系统,即rsyslog+elk. 因为目前仍为测试环境,这里说一下搭建的基础架构,后期上生产线再来更新最后的架构图,大佬们如果有什么见 ...
- ELK日志分析系统搭建
之前一段时间由于版本迭代任务紧,组内代码质量不尽如人意.接二连三的被测试提醒后台错误之后, 我们决定搭建一个后台日志分析系统, 经过几个方案比较后,选择的相对更简单的ELK方案. ELK 是Elast ...
随机推荐
- x&(x-1)
x&(x-1)可以用来求出x是否为2幂次方数:当&的结果为0时,x原值是2幂次方数,否则就不是2幂次方数: x=x&(x-1)即把x从低位开始的第一个1改成0.如1000,把1 ...
- java面试笔试题大汇总
第一,谈谈final, finally, finalize的区别. 最常被问到. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以 ...
- Python进程与线程
进程与线程:*进程: 进程是系统中程序执行和资源分配的基本单元, 每个进程都有自己的数据段(存储数据).代码段(存储代码).堆栈段(对象和变量). # 全局变量等资源在多个进程中不能 ...
- Effective Java 第三版——39. 注解优于命名模式
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- 为什么Python编程被国家教育如此重视?请开始你的表演!
高考新宠 在高考更改之前,提起编程,人们可能更多的会想起c语言之类的. 然而,高考更始之后,Python这门编程说话一夜之间传进了千家万户. 现实上,在IEEE(美国电气电子工程师学会出书的旗舰杂志) ...
- D3中的each() 以及svg defs元素 clipPath的使用
each() 方法允许我们定制对选择集中DOM元素的处理行为: selection . each ( func ) 参数 func 是调用者定义的函数,在d3中被称为 访问器/accessor . d ...
- Html5的表单元素
表单是HTML中获取用户输入的手段,,对于web应用系统及其重要,文字是不能说明问题的: 直接上代码把: <!DOCTYPE html><html lang="en&quo ...
- HTTP认证方式详解
HTTP请求报头: Authorization HTTP响应报头: WWW-Authenticate HTTP认证 基于 质询 /回应( challenge/response)的认证模式. ◆ ...
- Java基础小知识1——分别使用字节流和字符流复制文件
在日常使用计算机过程中经常会涉及文件的复制,今天我们就从Java代码的角度,看看在Java程序中文件复制的过程是如何实现的. 1.使用字节流缓冲区复制文件 示例代码如下: import java.io ...
- 关于ArrayList的5道面试题
我以面试官的身份参加过很多Java的面试,以下是五个比较有技巧的问题,我发现有些初级到中级的Java研发人员在这些问题上没有完全弄明白,似懂非懂.所以我写了一篇相关的文章,帮助初级Java研发人员弄清 ...