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. java 内部类、匿名内部类

    一:内部类 1:什么是内部类? 大部分时候,类被定义成一个独立的程序单元.在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类(有些地方也叫做嵌套类),包含内部类的 ...

  2. Linux 系统的安全加固

    Linux是一套免费使用和自由传播的类Unix操作系统,作为一个开放源代码的操作系统,Linux服务器以其安全.高效和稳定的显著优势而得以广泛应用,但如果不做好权限的合理分配,Linux系统的安全性还 ...

  3. servlet报错“严重: Allocate exception for servlet 类名java.lang.ClassNotFoundException: 路径. 类名”可能原因

    1.WEB-INF下web.xml中<servlet-class>路径错误,正确路径为 <servlet-class>包名.类名</servlet-class> 2 ...

  4. 在QT中添加LIB的方法

    注意:-L后面跟着的目录不能用空格,否则会出现读不到的情况. 例如win32下添加D:\app\my.lib   就 pro文件中 LIBS += -LD:\app\debug\ -lmy

  5. QT QListWidget去掉滚动条

    1.去掉滚动条 设置样式  包含背景色等更改 setStyleSheet("QListWidget{color:gray;font-size:12px;background:#FAFAFD; ...

  6. C#【堆与栈 值类型 引用类型】

    先说C#中值类型和引用类型 概念: 1.值类型:数据存储在内存的堆栈中,从堆栈中可以快速地访问这些数据,因此,值类型表示实际的数据. 2.引用类型:表示指向存储在内存堆中的数据的指针或引用(包括类.接 ...

  7. android适配知识总结

    一.http适配 背景:API升级到28以后,不再支持明文的网络请求,只支持https请求.运行所报错误:java.net.UnknownServiceException: CLEARTEXT com ...

  8. @ComponentScan注解及其XML配置

    开发中会经常使用包扫描,只要标注了@Controller.@Service.@Repository,@Component 注解的类会自动加入到容器中,ComponentScan有注解和xml配置两种方 ...

  9. Spring Cloud(六)服务网关 zuul 快速入门

    服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能.Spring Cloud Netflix中 ...

  10. 使用JS和PHP导出table表格

    把table表格的内容导出成excel 或者word等格式(简单容易不需要太多php) 导出需注意 1. 样式都在行间,导出excel表格会继承样式包括colspan.rowspan,非表格元素,样式 ...