elastic search&logstash&kibana 学习历程(三)Logstash使用场景和安装部署
Logstash基本介绍和使用场景
自我认为:logstash就是日志的采集收集,日志的搬运工,实时去采集日志。读取不同的数据源,并进行过滤,开发者自定义规范输出到目的地。日志的来源很多,如系统日志,应用日志等等(同类软件:filebeat)
官方文档:https://www.elastic.co/guide/en/logstash/current/index.htm
工作传输流程
在centos7上安装logstash
下载 logstash-6.2..tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.4.tar.gz tar -xvf logstash-6.2..tar.gz
cd logstash-6.2./ 修改配置文件:(基本配置)
logstash.yml 修改 pipeline.workers,根据CPU核数增加1到2即可
jvm.options 修改 xms和xmx为相同,一般是系统内存三份之二
input filter output数据流程测试
logstash配置文件vim logstash.conf
input {
file { # 从文件读取日志信息
path => "/var/log/messages" #文件所在的路径
type => "system" #类型是system类型
codec => "json" #日志格式时json格式时打开
start_position => "beginning" #从哪里开始读,beginning
}
} filter {
mutate{ #切割插件
split => ["message","|"] #通过|切割为message的数组
} } output {
elasticsearch {
#stdout { codec => rubydebug } #格式化控制台输出
hosts => ["localhost:9200"] #输出到es中
index => "logstash-test-%{type}-%{host}" #输出到哪个索引中去
}
}
logstash 常用插件
案例1:
input{
file{
path => "/var/log/messages" #路径可以通过数组传多个路径 ["path1","path2"]
type => "system"
start_position => "beginning" #如果不加这个参数默认从文件的末尾去手机
}
}
output{
elasticsearch{
hosts => ["192.168.1.127:9200"] #地址是你es的地址
index => "message-%{+YYYY.MM.dd}" #添加到es中的message+当前日期的索引中,如果没有这个索引就新建
}
stdout{ codec => rubydebug}
} 案例二 通过type不同将日志加入不同的索引中
input{
file{
path => "/var/log/messages"
type => "system" #在此处设置类型
start_position => "beginning"
}
file{
path => "/temp/elasticsearch-6.2.4/logs/my-es.log"
type => "elasticsearch" #在此处设置类型
start_position => "beginning"
}
}
output{
if [type] == "system" { #判断类型
elasticsearch{
hosts => ["192.168.1.127:9200"]
index => "message-%{+YYYY.MM.dd}"
}
} if [type] == "elasticsearch" { #判断类型
elasticsearch{
hosts => ["192.168.1.127:9200"]
index => "elasticsearch-%{+YYYY.MM.dd}"
}
}
stdout{ codec => rubydebug}
} 案例三 input{
file{
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
file{
path => "/temp/elasticsearch-6.2.4/logs/my-es.log"
type => "elasticsearch"
start_position => "beginning"
codec => multiline{ #设置日志的分割格式,不是按每一行进行分割 只是在碰到[进行分割为一个事件。
pattern => "^\["
negate => true
what => "previous"
}
}
}
output{
if [type] == "system" {
elasticsearch{
hosts => ["192.168.1.127:9200"]
index => "message-%{+YYYY.MM.dd}"
}
} if [type] == "elasticsearch" {
elasticsearch{
hosts => ["192.168.1.127:9200"]
index => "elasticsearch-%{+YYYY.MM.dd}"
}
}
stdout{ codec => rubydebug}
}
针对nginx的访问日志收集
修改nginx的日志格式 根据实际情况vim /usr/local/nginx/conf/nginx.conf
http{
log_format json '{"@timestamp":"$time_iso8601",' #时间戳格式(否则logstash会一直有警告)
'"client":"$remote_addr",'
'"url":"$uri",'
'"status":"$status",'
'"domain":"$host",'
'"host":"$server_addr",'
'"size":"$body_bytes_sent",'
'"responsetime":"$request_time",'
'"referer":"$http_referer",'
'"ua":"$http_user_agent"'
'}';
server{
access_log logs/access_json.log json;
}
} 配置logstash
input{
file{
path => "/usr/local/nginx/logs/access_json.log"
type => "nginx"
start_position => "beginning"
codec => json
}
}
filter{
if [client] == "192.168.1.129"{ #碰到client为192.168.1.129的主机访问丢弃
drop{}
}
geoip { #基于访问ip确定地理位置需要下载配合数据库wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
source => "client" #访问的IP地址
target => "geoip"
database => "/temp/logstash-6.2.4/GeoLite2-City_20180501/GeoLite2-City.mmdb" #解压后的mmdb文件位置
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[geoip][coordinates]", "float" ]
}
}
}
output{
#stdout{}
#stdout { codec => rubydebug }
if [type] == "nginx"{
elasticsearch{
hosts=>["192.168.1.127:9200"]
index => "iroad-nginx-access-%{+YYYY.MM.dd}"
}
}
}
syslog 和logstash对接
写logstash配置文件
input{
syslog{
type => "system-syslog"
host => "192.168.1.127"
port => "524"
}
}
output{
stdout{
codec => rubydebug
}
}
启动logstash
vim /etc/rsyslog.conf #修改配置文件使系统日志文件直接写到远程端口
将下图中的打开 填写你logstash中配好好的ip和端口
重新启动 systemctl restart rsyslog.service
重新启动rsyslog就会有数据显示在终端
input插件的tcp应用
input{
tcp{
host => "192.168.1.127"
port => ""
}
output{
stdout{
codec => rubydebug
}
}
filter插件的使用 mysql慢查询日志
input{
file{
path => "/temp/log/mysql-slow1.log"
type => "mysql_slowlog"
start_position => "beginning"
codec => multiline {
pattern => "# User@Host"
negate => "true"
what => "previous"
}
}
}
filter{
grok{
match => {
"message" => "(?m)^# User@Host: %{USER:User}\[[^\]]+\] @ (?:(?<clienthost>\S*) )?\[(?:%{IP:Client_IP})?\]\s.*# Query_time: %{NUMBER:Query_Time:float}\s+Lock_time: %{NUMBER:Lock_Time:float}\s+Rows_sent: %{NUMBER:Rows_Sent:int}\s+Rows_examined: %{NUMBER:Rows_Examined:int}\s*(?:use %{DATA:Database};\s*)?SET timestamp=%{NUMBER:timestamp};\s*(?<Query>(?<Action>\w+)\s+.*)\n# Time:.*$"
}
}
date {
match => [ "timestamp", "UNIX" ]
remove_field => [ "timestamp" ]
} }
output{
# stdout{
# codec => rubydebug
# }
elasticsearch {
hosts => ["192.168.1.127:9200"]
index => "mysql_slow-%{+YYYY.MM.dd}"
}
}
tomcat和nginx小案例
input{
file{
path => "/usr/local/nginx/logs/access_json.log"
type => "nginx"
start_position => "beginning"
codec => json
}
file{
path => "/home/app/tomcat/apache-tomcat-8.5.8/logs/*\.txt"
type => "tomcat"
start_position => "beginning"
codec => json
} }
filter{
if [client] == "192.168.1.129"{
drop{}
}
if [url] =~ ".*\/setBusinessGps\.json\ HTTP\/1.0" {
drop{}
}
if [url] =~ ".*\ \/iroad-service\/.*\.json\ HTTP\/1.0$"{ grok {
tag_on_failure => "通用"
}
}
if [url] =~ ".*\ \/iroad-view\/.*\ HTTP\/1.0$"{ grok {
tag_on_failure => "中山h5"
}
} geoip {
source => "client"
target => "geoip"
database => "/temp/logstash-6.2.4/GeoLite2-City_20180501/GeoLite2-City.mmdb"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
} mutate {
convert => [ "[geoip][coordinates]", "float" ]
} }
output{
#stdout{}
#stdout { codec => rubydebug }
if [type] == "nginx"{
elasticsearch{
hosts=>["192.168.1.127:9200"]
manage_template => true
index => "logstash-iroad-nginx-access-new-%{+YYYY.MM.dd}"
}
}
if [type] == "tomcat"{
elasticsearch{
hosts=>["192.168.1.127:9200"]
manage_template => true
index => "logstash-iroad-tomcat-access-new-%{+YYYY.MM.dd}"
}
}
}
input和output与redis(list)消息队列实现解耦
输出到redis中
input{
stdin{}
}
filter{ }
output{
redis {
host => "192.168.1.162"
port => ""
db => ""
data_type => "list" #应用的是redis的list列表
key => "demo" #定义key
}
}
从redis中输入
input{
redis {
host => "192.168.1.162"
port => ""
db => ""
data_type => "list" #应用的是redis的list列表
key => "demo" #从key="demo"中取出
}
}
filter{ }
output{
elasticsearch {
hosts => ["192.168.1.127:9200"]
index => "redis-%{YYYY.MM.dd}"
}
}
input插件:https://www.elastic.co/guide/en/logstash/current/input-plugins.html
filter插件:https://www.elastic.co/guide/en/logstash/current/filter-plugins.html
output插件:https://www.elastic.co/guide/en/logstash/current/output-plugins.html
目录文件说明:https://www.elastic.co/guide/en/logstash/6.2/dir-layout.html
配置详解:https://www.elastic.co/guide/en/logstash/6.2/logstash-settings-file.html
elastic search&logstash&kibana 学习历程(三)Logstash使用场景和安装部署的更多相关文章
- elastic search&logstash&kibana 学习历程(四)kibana安装部署和使用
kibana在linux上的部署安装 运行环境是centos7 基于jdk8 下载安装包:wget https://artifacts.elastic.co/downloads/kibana/kiba ...
- elastic search&logstash&kibana 学习历程(一)es基础环境的搭建
elastic search 6.1.x 常用框架: 1.Lucene Apache下面的一个开源项目,高性能的.可扩展的工具库,提供搜索的基本架构: 如果开发人员需用使用的话,需用自己进行开发,成本 ...
- elastic search&logstash&kibana 学习历程(二)es基础知识
简介:es的index索引,document文档对象,副本,多节点集群等基础知识 1.通俗的解释: 在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中 ...
- docker安装elastic search和kibana
安装目标 使用docker安装elastic search和kibana,版本均为7.17.1 安装es 1. docker pull 去dockerhub看具体版本,这里用7.17.1 docker ...
- kvm虚拟化学习笔记(三)之windows kvm虚拟机安装
KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...
- Storm入门教程 第三章Storm集群安装部署步骤、storm开发环境
一. Storm集群组件 Storm集群中包含两类节点:主控节点(Master Node)和工作节点(Work Node).其分别对应的角色如下: 主控节点(Master Node)上运行一个被称为N ...
- Elastic Search和Kibana入门
一.ES配置 二.ES本地快速搭建集群 查看ES集群 查看node详细情况 三.Kibana配置 修改kibana的es配置 访问localhost:5601端口 四.Elasticsearch 术语 ...
- 基础知识——Cocos2d-x学习历程(三)
1.场景与流程控制 我们把一些内容相对不变的游戏元素集合称作场景(scene),把游戏在场景之间切换的过程叫做流程控制(flow control). 在Cocos2d-x中,场景的实现是Scene. ...
- 区块链开发学习第三章:私有链上部署helloBlockchain简单合约
前面讲了部署私有链以及新增账户,现在进行到了部署合约了,此操作真是踩了无数无数无数的坑,到写文章为止确实是已经部署好了,但是还有些坑是还没有解决的! 一.Solidity编译器 开始的时候用的http ...
随机推荐
- gitlab安装指南(gitlab-ce-9.4.3-ce.0.el7.x86_64 centos7)
1,安装gitlab wget https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-9.4.3-ce.0.el7. ...
- 【深度森林第三弹】周志华等提出梯度提升决策树再胜DNN
[深度森林第三弹]周志华等提出梯度提升决策树再胜DNN 技术小能手 2018-06-04 14:39:46 浏览848 分布式 性能 神经网络 还记得周志华教授等人的“深度森林”论文吗?今天, ...
- mysql 5.7.19安装
从mysql官网下载的mysql5.7.19免安装版, 安装时出现问题,mysql总是启动不起来,在网上查了下资料,做个记录: .将mysql解压到指定的文件夹 .以管理员身份运行cmd .定位到my ...
- 08 redis缓存穿透、缓存雪崩、缓存击穿
Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面.但同时,它也带来了一些问题.其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解.如果对数据的一致性要求很 ...
- vue.js devtools图标不亮
第一步:打开谷歌扩展程序 第二步:设置允许访问文件地址
- tomcat 部署 React 项目后,浏览器刷新报404问题
问题:tomcat部署了react前端项目,可以正常访问,但是页面刷新就报404 一.问题截图 二.解决办法 在tomcat 配置文件web.xml中配置如下代码: web.xml 路径: apach ...
- C++ STL 之 容器的深拷贝和浅拷贝
如果我们没有提供拷贝构造函数,没有重载=操作符,vector 对我们的 mc 对象进行的简单的浅拷贝,将拷贝的对象插入到容器中,导致我们的 mc 对象的 data 指针和容器中mc 对象的拷贝对象中的 ...
- About Spring MVC
一.简介 1.Springmvc是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解 ...
- c#复制文件夹和文件
/// <summary> /// 拷贝文件夹 /// </summary> /// <param name="srcdir"></par ...
- shiro系列三、ssm框架整合shiro实现权限控制
shiro权限框架是一个非常优秀的框架,前面的几篇文章对shiro进行了非常详细的介绍和原理分析,那么接下来让我们开始在web项目中使用它(javase也能用shiro): 一.数据库表结构设计 二. ...