Elk

Table of Contents

外链

搜索引擎原理

  • 反向索引又叫倒排索引,是根据文章内容中的关键字建立索引。
  • 搜索引擎原理就是建立反向索引。
  • Elasticsearch 在 Lucene 的基础上进行封装,实现了分布式搜索引擎。
  • Elasticsearch 中的索引、类型和文档的概念比较重要,类似于 MySQL 中的数据库、表和行。
  • Elasticsearch 也是 Master-slave 架构,也实现了数据的分片和备份。
  • Elasticsearch 一个典型应用就是 ELK 日志分析系统。

ELK Stack(免费开源)

``` graph LR Beats–>Elasticsearch Logstash–>Elasticsearch Elasticsearch–>Kibana ```

X-Pack(免费开源,但商业授权协议)

  • Security
  • Alerting
  • Monitoring
  • Reporting
  • Graph
  • Machine Learning

example

input {
    #file可以多次使用,也可以只写一个file而设置它的path属性配置多个文件实现多文件监控
    file {
	#type是给结果增加了一个属性叫type值为"<xxx>"的条目。这里的type,对应了ES中index中的type,即如果输入ES时,没有指定type,那么这里的type将作为ES中index的type。
	type => "apache-access"
	#监听文件的路径,此处位数组的形式,代表可以监听多个文件
	path => ["/opt/logstash/logstash/data/*","/var/log/message.log"]
	#这个值默认是\n 换行符,如果设置为空"",那么后果是每个字符代表一个event
	delimiter => ""
	#排除不想监听的文件
	exclude => "1.log"
	#add_field增加属性。这里使用了${HOSTNAME},即本机的环境变量,如果要使用本机的环境变量,那么需要在启动命令上加--alow-env。
	add_field => {"log_hostname"=>"${HOSTNAME}"}
	#增加标签
	tags => "tag1"
	#设置新事件的标志
	delimiter => "\n"
	#设置多长时间扫描目录,发现新文件
	discover_interval => 15
	#设置多长时间检测文件是否修改
	stat_interval => 1
	#ignore_older表示了针对多久的文件进行监控,默认一天,单位为秒,可以自己定制,比如默认只读取一天内被修改的文件。
	ignore_older => 604800
	#start_position可以设置为beginning或者end,beginning表示从头开始读取文件,end表示读取最新的,这个也要和ignore_older一起使用。
	start_position => beginning
	#sincedb_path表示文件读取进度的记录,每行表示一个文件,每行有两个数字,第一个表示文件的inode,第二个表示文件读取到的位置(byteoffset)。默认为$HOME/.sincedb*
	sincedb_path => "/opt/logstash/logstash/test.txt"
	#设置多长时间会写入读取的位置信息
	sincedb_write_interval => 15
	#监听发送日志的主机地址
	host => "localhost"
	#监听发送日志主机的端口号
	port => 5044
    }
}
filter{
      #执行ruby程序,下面例子是将日期转化为字符串赋予daytag
      ruby {
	code => "event['daytag'] = event.timestamp.time.localtime.strftime('%Y-%m-%d')"
  }
      # if [path] =~ "access" {} else if [path] =~ "methodserver" {} else if [path] =~ "servermanager" {} else {} 注意语句结构
      if [path] =~ "MethodServer" { #z这里的=~是匹配正则表达式
      grok {
	  patterns_dir => ["/opt/logstash-2.3.1/patterns"] #自定义正则匹配
	  #Tue 4/12/16 14:24:17: TP-Processor2: hirecode---->77LS
	  match => { "message" => "%{DAY:log_weekday} %{DATE_US:log_date} %{TIME:log_time}: %{GREEDYDATA:log_data}"}
    }
      #mutage是做转换用的
      mutate {
	  replace => { "type" => "apache" } #替换属性值
	  convert => { #类型转换
	  "bytes" => "integer" #例如还有float
	  "duration" => "integer"
	  "state" => "integer"
      }
      #date主要是用来处理文件内容中的日期的。内容中读取的是字符串,通过date将它转换为@timestamp。参考https://www.elastic.co/guide/en/logstash/current/plugins-filters- date.html#plugins-filters-date-match
    #date {
	#match => [ "logTime" , "dd/MMM/yyyy:HH:mm:ss Z" ]
    #}
  }else if [type] in ['tbg_qas','mbg_pre'] { # if ... else if ... else if ... else结构
  }else {
    drop{} # 将event丢弃
  }
}
output {
#  stdout{ codec=>rubydebug}
  redis {
    host => '10.120.20.208'
    data_type => 'list'
    key => 'log_raw_data'
  }
  redis {
    host => '10.120.31.142'
    data_type => 'list'
    key => 'log_raw_data'
  }
}

Date: 2019-12-02 Mon 09:06

Author: yangk

Created: 2023-01-03 Tue 12:43

hello-world