Logstash分享,online生产环境的使用,online日志规范。

Posted by Yancy on 2017-11-13

Logstash分享,online生产环境的使用,online日志规范。

写这篇文章,主要分享几点: 因为学所有学,既然学何不深度去了解~

  1. 什么是Logstash?
  2. logstash运行在什么环境下对应的版本是多少?
  3. logstash工作原理?
  4. online日志现在是如何规范?
  5. 如何写logstash收集conf文件?

1. 什么是Logstash?

1
Logstash 是有管道输送能力的开源数据收集引擎。它可以动态地从分散的数据源收集数据,并且标准化数据输送到你选择的目的地。它是一款日志而不仅限于日志的搜集处理框架,将分散多样的数据搜集自定义处理并输出到指定位置。

2. logstash运行在什么环境下对应的版本是多少?

1
2
3
4
5
6
logstash更新比较快,跟es一样,2.4以上直接升级到5.0
5.0x以下版本运行环境 需要JDK1.7以上版本.
5.0x版本运行环境 需要JDK1.8以上版本。
安装方法很多:yum,rpm,tar.gz源码, 支持Docker镜像运行。

3. logstash工作原理?

1
2
3
4
5
6
7
8
Logstash使用管道方式进行日志的搜集处理和输出。有点类似linux系统的管道命令 xxx | ccc | ddd,xxx执行完了会执行ccc,然后执行ddd。
logstash收集日志基本流程: input-->codec-->filter-->codec-->output
1.input:从哪里收集日志。
2.filter:发出去前进行过滤 (不是必须的)
3.output:输出至Elasticsearch或Redis消息队列
4.codec:输出至前台,方便边实践边测试
5.数据量不大日志按照月来进行收集

4.日志现在收集规范:

是记录用户访问行为和服务运行状态的信息,是应用软件基本的输出单元,做到日志输出位置、命名、格式规范,可以大大方便后续应用服务监控和数据分析。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1. 日志目录结构
2. 日志类型
3. 日志要求配置
4. 日志级别
5. 日志分割与周期
6. 日志保留要求
现在我们online 日志规范架构:
###之前应用日志规范:
一个Tomcat服务logs目录下面的日志:定期对catalina.out几个G按两个小时进行压缩一次,保留7天,每天备份到log-server服务器。
logstash收集catalina.out所有日志。
###现在应用日志规范:
一个Tomcat服务logs目录下面的日志:定期对catalina.out每天1M多日志进行压缩一次,保留7天,每天备份到log-server服务器。
logstash收集每台应用输出应用日志:error.log & info.log
好处分别为四个:
1.对索引的要求细分和kibana查询日志速度无疑会变更快。
2.查询日志快速定位。
3.不会对catalina.out日志进行大级别日志写入,那里只存放系统日志,例如:发布日志,请求第三方地址日志。
4.日志开发可以在Java代码log4j文件大小指定压缩,每天定时清空,不需要我们写脚本处理。多个脚本定时在运行,特别乱。

5.如何写logstash收集conf文件?

下面是我写好的online logstash收集代码,根据之前日志收集方式,现在修过几个地方:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
input {
stdin{} #可以标准输入读数据 (可以放可以不放)
file {
type => "tms-task-info"
path => ["/data/tms-task_new/logs/info.log"]
start_position => "beginning" #从文件开始处读写
}
file {
type => "tms-task-error"
path => ["/data/tms-task_new/logs/error.log"]
start_position => "beginning" #从文件开始处读写
}
}
filter { #过滤方式
multiline {
pattern => "^\d+-\d+-\d+"
negate => true
what => "previous"
}
}
output {
if [type] == "tms-task-info" {
elasticsearch {
hosts => ["10.155.90.141:9200","10.155.90.176:9200"]
index => "log-tms-task-info-%{+YYYY.MM.dd}"
document_type => "log"
template_overwrite => true
}
}
if [type] == "tms-task-error" {
elasticsearch {
hosts => ["10.155.90.141:9200","10.155.90.176:9200"]
index => "log-tms-task-error-%{+YYYY.MM.dd}"
document_type => "log"
template_overwrite => true
}
}
stdout{
codec=>rubydebug #控制台输出 (不建议配置,测试阶段可以调试使用)
}
}

解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
有一些比较有用的配置项,可以用来指定 FileWatch 库的行为:
discover_interval
logstash 每隔多久去检查一次被监听的 path 下是否有新文件。默认值是 15 秒。
exclude
不想被监听的文件可以排除出去,这里跟 path 一样支持 glob 展开。
sincedb_path
如果你不想用默认的 $HOME/.sincedb(Windows 平台上在 C:\Windows\System32\config\systemprofile\.sincedb),可以通过这个配置定义 sincedb 文件到其他位置。
sincedb_write_interval
logstash 每隔多久写一次 sincedb 文件,默认是 15 秒。
stat_interval
logstash 每隔多久检查一次被监听文件状态(是否有更新),默认是 1 秒。
start_position
logstash 从什么位置开始读取文件数据,默认是结束位置,也就是说 logstash 进程会以类似 tail -F 的形式运行。如果你是要导入原有数据,把这个设定改成 "beginning",logstash 进程就从头开始读取,有点类似 cat,但是读到最后一行不会终止,而是继续变成 tail -F。

配置详解:参考中文文档logstash-best-practice-cn
官网详细说明:multiple-input-output-plugins

Communicative learning:

🐧 Linux shell_ senior operation and maintenance faction: QQ group 459096184 circle (system operation and maintenance - application operation and maintenance - automation operation and maintenance - virtualization technology research, welcome to join)
🐧 BigData-Exchange School:QQ group 521621407 circles (big data Yun Wei) (Hadoop developer) (big data research enthusiasts) welcome to join

Bidata have internal WeChat exchange group, learn from each other, join QQ group has links.