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使用场景和安装部署的更多相关文章

  1. elastic search&logstash&kibana 学习历程(四)kibana安装部署和使用

    kibana在linux上的部署安装 运行环境是centos7 基于jdk8 下载安装包:wget https://artifacts.elastic.co/downloads/kibana/kiba ...

  2. elastic search&logstash&kibana 学习历程(一)es基础环境的搭建

    elastic search 6.1.x 常用框架: 1.Lucene Apache下面的一个开源项目,高性能的.可扩展的工具库,提供搜索的基本架构: 如果开发人员需用使用的话,需用自己进行开发,成本 ...

  3. elastic search&logstash&kibana 学习历程(二)es基础知识

    简介:es的index索引,document文档对象,副本,多节点集群等基础知识 1.通俗的解释: 在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中 ...

  4. docker安装elastic search和kibana

    安装目标 使用docker安装elastic search和kibana,版本均为7.17.1 安装es 1. docker pull 去dockerhub看具体版本,这里用7.17.1 docker ...

  5. kvm虚拟化学习笔记(三)之windows kvm虚拟机安装

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

  6. Storm入门教程 第三章Storm集群安装部署步骤、storm开发环境

    一. Storm集群组件 Storm集群中包含两类节点:主控节点(Master Node)和工作节点(Work Node).其分别对应的角色如下: 主控节点(Master Node)上运行一个被称为N ...

  7. Elastic Search和Kibana入门

    一.ES配置 二.ES本地快速搭建集群 查看ES集群 查看node详细情况 三.Kibana配置 修改kibana的es配置 访问localhost:5601端口 四.Elasticsearch 术语 ...

  8. 基础知识——Cocos2d-x学习历程(三)

    1.场景与流程控制 我们把一些内容相对不变的游戏元素集合称作场景(scene),把游戏在场景之间切换的过程叫做流程控制(flow control). 在Cocos2d-x中,场景的实现是Scene. ...

  9. 区块链开发学习第三章:私有链上部署helloBlockchain简单合约

    前面讲了部署私有链以及新增账户,现在进行到了部署合约了,此操作真是踩了无数无数无数的坑,到写文章为止确实是已经部署好了,但是还有些坑是还没有解决的! 一.Solidity编译器 开始的时候用的http ...

随机推荐

  1. 第十二章 ZYNQ-MIZ702 PS读写PL端BRAM

      本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将 ...

  2. Django模型(model)系统

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  3. 优化方法总结以及Adam存在的问题(SGD, Momentum, AdaDelta, Adam, AdamW,LazyAdam)

    优化方法总结以及Adam存在的问题(SGD, Momentum, AdaDelta, Adam, AdamW,LazyAdam) 2019年05月29日 01:07:50 糖葫芦君 阅读数 455更多 ...

  4. django+uwsgi+nginx: websock 报502/400

    耽搁了近2个月,终于解决了,主要是nginx/uwsgi/django相关的配置: 一.django工程settings.py,添加 WEBSOCKET_FACTORY_CLASS = "d ...

  5. CodeFirst实体类中,为什么都把ICollection<x>定义成virtual?

    主要是用于延迟加载,提高性能用的 只有定义成virtual后才可以延迟加载. 延迟加载,默认情况下,延迟加载被支持,如果你希望禁用它,必须显式声明,最好的位置是在 DbContext 的构造器中. p ...

  6. C# 使用Emit实现动态AOP框架 (二)

    目  录 C# 使用Emit实现动态AOP框架 (一) C# 使用Emit实现动态AOP框架 (二) C# 使用Emit实现动态AOP框架 (三) C# 使用Emit实现动态AOP框架 进阶篇之异常处 ...

  7. javaIO——PushbackReader

    1. 注释解释: A character-stream reader that allows characters to be pushed back into the stream. 一个允许字符被 ...

  8. shell script 编程入门

    参考 <linux shell scripting cookbook> 控制台输出 结构化输出 #!/bin/bash #Filename: printf.sh printf " ...

  9. interrupt分析

    转载自 https://blog.csdn.net/zhangliangzi/article/details/52485319 interrupt简述 interrupt() 方法只是改变中断状态而已 ...

  10. BootStrap【三、组件】

    特有标签属性 role 用于浏览器识别 aria-label 用于浏览器识别 tabIndex 用于浏览器识别 data- 自定义数据属性 图标 直接引用官方图标库中的class 官方图标库 Demo ...