收集Java堆栈日志
收集Java堆栈日志
一般应用记录的日志,每行表示一个事务,但有些日志是多行表示一个事务。
例如,常见的Java堆栈日志:
Exception in thread “main” java.lang.NullPointerException
at com.example.myproject.Book.getTitle(Book.java:16)
at com.example.myproject.Author.getBookTitles(Author.java:25)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
上面文档表示四行,在Kibana里也视为四个单独的文档,但实际这是一个异常日志,如果分开阅读会脱离上 下文关系,不利于分析。
因此,为了避免此问题,可以让filebeat启用多行处理,将这四行作为一个事件发送。
filebeat多行参数:
• multiline.pattern: ‘^\s’ 正则表达式,匹配行
• multiline.negate: false 否定正则匹配模式,正则取反效果。例如fa ...
Logstash 过滤插件Grok GeoIp Date
过滤插件:Grok
Grok插件:如果采集的日志格式是非结构化的,可以写正则表 达式提取,grok是正则表达式支持的实现。
常用字段:
• match 正则匹配模式
• patterns_dir 自定义正则模式文件
Logstash内置的正则匹配模式,在安装目录下可以看到,路径: vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns
正则匹配模式语法格式:%{SYNTAX:SEMANTIC}
• SYNTAX 模式名称,模式文件中的第一列
• SEMANTIC 匹配文件的字段名
例如: %{IP:client}
示例:正则匹配HTTP请求日志
修改logstash配置文件
vim /opt/elk/logstash/conf.d/test.conf
input { file { path => "/var/log/test/*.log" exclude => "1.log" ...
Logstash部署,输入插件
Logstash 介绍
Logstash能够将采集日志、格式化、过滤,最后将数据推送到Elasticsearch存储。
Input:输入,输入数据可以是Stdin、File、TCP、Redis、Syslog等。
Filter:过滤,将日志格式化。有丰富的过滤插件:Grok正则捕获、Date时间处理、Json编解码、Mutate数据修改等。
Output:输出,输出目标可以是Stdout、File、TCP、Redis、ES等
Logstash 部署
二进制方式部署:
yum install java-1.8.0-openjdk -ytar zxvf logstash-7.9.3.tar.gzmv logstash-7.9.3 /opt/elk/logstash
修改配置文件:
vi /opt/elk/logstash/config/logstash.yml
pipeline: # 管道配置 batch: size: 125 delay: 5path.config: /opt/elk/logstash/conf.d # conf.d目录自己创建# 定期检查配置是否修改,并重新加载管道 ...
Logstash 输出插件
输出插件(Output)
输出阶段:将处理完成的日志推送到远程数据库存储
常用插件:
• file
• Elasticsearch
输入插件:Elasticsearch
Elasticsearch插件:将数据推送到ES存储。
常用字段:
• hosts 指定ES主机地址
• index 指定写入的ES索引名称,一般按日期ec 划分
示例:
output { elasticsearch { hosts => ["192.168.0.11:9200","192.168.0.12:9200","192.168.0.13:9200"] index => "product-%{+YYYY.MM.dd}" }}
条件判断
操作符:
比较操作符:== ,!= , < , > , <= ,>=
正则匹配操作符:=~(匹配正则) ,!~(不匹配正则)
成员操作符 ...
Logstash 过滤插件 json kv
过滤插件(Filter)
过滤阶段:将日志格式化处理
常用插件:
• json • kv • grok • geoip • date
过滤插件:通用配置字段
过滤插件都支持的字段:
• add_field 如果过滤成功,添加一个字段到这个事件
• add_tags 如果过滤成功,添加任意数量的标签到这个事件
• remove_field 如果过滤成功,从这个事件移除任意字段
• remove_tag 如果过滤成功,从这个事件移除任意标签
过滤插件:JSON
JSON插件:接收一个json数据,将其展开为Logstash事件中的 数据结构,放到事件顶层。
常用字段:
• source 指定要解析的字段,一般是原始消息message字段
• target 将解析的结果放到指定字段,如果不指定,默认在 事件的顶层
示例:解析HTTP请求
修改logstash配置文件
vim /opt/elk/logstash/conf.d/test.conf
input { file { path => "/var/log/te ...
Filebeat日志采集器
Filebeat介绍
Filebeat是一个轻量级的日志采集器,将采集的数据推送到Logstash、ES存储。
Filebeat部署
采用RPM安装
rpm -ivh filebeat-7.9.3-x86_64.rpm
配置文件详解:
# vi /etc/filebeat/filebeat.yml# 配置不同的输入- type: log# 是否启用该输入配置enabled: false# 采集的日志文件路径,可以通配paths:- /var/log/*.log# 正则匹配要排除的行,这里以DBG开头的行都过滤掉#exclude_lines: ['^DBG']# 正则匹配要采集的行,这里以ERR/WARN开头的行都采集#include_lines: ['^ERR', '^WARN']# 排除的文件,默认采集所有#exclude_files: ['.gz$']# 添加标签#tags: ["nginx"]# 下面fields添加的字段默认是在fields.xxx,可以设置在顶级对象下# fi ...
es集群部署搭建
需求背景:
• 业务发展越来越庞大,服务器越来越多
• 各种访问日志、应用日志、错误日志量越来越多
• 开发人员排查问题,需要到服务器上查日志,效率低、权限不好控制
• 运维需实时关注业务访问情况
ELK 介绍
ELK 是三个开源软件的缩写,提供一套完整的企业级日志平台解决方案。
分别是:
• Elasticsearch:搜索、分析和存储数据
• Logstash :采集日志、格式化、过滤,最后将数据推送到Elasticsearch存储
• Kibana:数据可视化
• Beats :集合了多种单一用途数据采集器,用于实现从边缘机器向 Logstash 和 Elasticsearch 发送数据。里面应用最多的是Filebeat,是一个轻量级日志采集器。
ELK 架构
Elasticsearch
Elasticsearch(简称ES)是一个分布式、RESTful 风格的搜索和数据分析引擎, 用于集中存储日志数据。
Elasticsearch术语:
• Index:索引是多个文档的集合
• Document:Index里每条记录称为Document,若干文档构建一个Index
• Typ ...
Jenkins备份与恢复
备份两种方式:
• 备份数据目录(/opt/jenkins_home)—>docker 部署
• Thinbackup插件
系统管理
设置: #备份的目录 (/var/jenkins_home/backup)
#多长时间备份一次(两三天)
#备份插件
恢复:
模拟删除项目进行恢复,恢复完成在系统管理点击读取设置加载,相当于重启Jenkins服务。
回滚设计—pipeline集合ansible发布多台web服务器
回滚方案:
一般回滚方案:
• 重新走一步流程发布上一次版本代码
• 部署之前备份程序文件
回滚流程设计:
回滚实现步骤:
安装Extended Choice Parameter插件并配置生成对应的语法
生成连接Jenkins服务器用户名和密码语法
此处是使用下面参数生成的凭据语法(避免脚本中用户名密码的敏感信息泄露)
1、在原有Pipeline脚本中增加生成“备份版本记录文件”脚本
备份的文件名格式最好是统一规范的,例如:项目名-文件名-日期-构建编号项目名:当前创建的项目文件名:部署war包的名称(ROOT.war)日期:date +%F构建编号:jenkins自带的变量(build_number) #备份版本记录文件的生成:ls /data/backup |awk '{print $0}'ls /data/backup |awk '{print $0","}'ls /data/backup |awk '{printf $0",&qu ...
pipeline集合ansible发布多台web服务器
一.安装ansible插件并生成对应插件的语法
新建项目(流水线)---->配置---->最下面流水线语法
1.生成ansible远程连接要部署web服务器的用户名和密码认证语法
2.生成选项参数语法
3.生成连接Jenkins服务器用户名和密码语法
二.配置流水线脚本
pipeline { agent { label "task1" } environment { git_address = "http://gitlab.ctnrs.com/my-group/ansible.git" git_password = "4cfc8d8f-489b-4c29-9f10-4a1b265e0cb3" ansible_ssh_auth = "a14ad8a7-5ad6-43de-bac6-221000c8015c" } parameters { ...