环境搭建
环境搭建说明
Centos 7 *2 + elastics 5.6.12 + logstash 5.6.12 + kibana 5.6.12 + filebeat 5.6.12
ElasticSearch环境搭建
下载解压
1
2wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.12.tar.gz
tar -zxvf elasticsearch-5.6.12.tar.gz -C /elk/elasticsearch/配置/config/elasticsearch.yml
1
2
3
4network.host: 0.0.0.0 # 访问地址
http.port: 9200 #端口号
cluster.name: nmtx-cluster
node.name: node-1运行
1
2nohup ./bin/elasticsearch > ../logs/elasticsearch.log 2>&1 & echo $! > process.pid
#在后台运行,日志打印到../logs/elasticsearch.log,进程号保存至process.pid- 踩过的坑
- 不要使用root账户启动elasticsearch,这是出于系统安全考虑设置的条件。
- max virtual memory areas vm.max_map_count [65530] is too low, increase to at ,需要调整虚拟内存设置
1
2
3
4
5
6vim /etc/sysctl.conf
#添加如下信息并保存
vm.max_map_count=655360
#运行以生效
sysctl -p - 需要修改linux对文件、线程的限制
1
2
3
4
5#修改系统文件
vim /etc/security/limits.d/20-nproc.conf
#调整成以下配置
* soft nproc 4096
root soft nproc unlimited
验证
访问9200端口看到如下类似信息即可
1
2
3
4
5
6
7
8
9
10
11
12
13{
"name" : "node-1",
"cluster_name" : "nmtx-cluster",
"cluster_uuid" : "plk3ql1SQ2umnqSpyBGI_w",
"version" : {
"number" : "5.6.12",
"build_hash" : "cfe3d9f",
"build_date" : "2018-09-10T20:12:43.732Z",
"build_snapshot" : false,
"lucene_version" : "6.6.1"
},
"tagline" : "You Know, for Search"
}
filebeat环境搭建
什么是Beats
Beats 是安装在服务器上的数据中转代理,Beats 可以将数据直接传输到 Elasticsearch 或传输到 Logstash 。常见的Beats:
- Packetbeat:网络数据包分析器,提供有关您的应用程序服务器之间交换的事务的信息。
- Filebeat:从您的服务器发送日志文件。
- Metricbeat:是一个服务器监视代理程序,它定期从服务器上运行的操作系统和服务收集指标。
- Winlogbeat:提供Windows事件日志。
为什么使用filebeat
相比 Logstash,FileBeat 更加轻量化。在任何环境下,应用程序都有停机的可能性。 Filebeat 读取并转发日志行,如果中断,则会记住所有事件恢复联机状态时所在位置
。Filebeat带有内部模块(auditd,Apache,Nginx,System和MySQL),可通过一个指定命令来简化通用日志格式的收集,解析和可视化。
FileBeat 不会让你的管道超负荷。FileBeat 如果是向 Logstash 传输数据,当 Logstash 忙于处理数据,会通知 FileBeat 放慢读取速度。一旦拥塞得到解决,FileBeat 将恢复到原来的速度并继续传播。
下载与安装
1
2wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.6.12-linux-x86_64.tar.gz
tar -zxvf ilebeat-5.6.12-linux-x86_64.tar.gz -C /elk/filebeat/配置filebeat.yml
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
28filebeat.prospectors:
# Each - is a prospector. Most options can be set at the prospector level, so
# you can use different prospectors for various configurations.
# Below are the prospector specific configurations.
- input_type: log
# Paths that should be crawled and fetched. Glob based paths.
paths:
- /var/log/*-info.log #监听文件目录以及正则匹配规则
#- c:\programdata\elasticsearch\logs\* windows下的路径
multiline: # 日志多行处理,列如java的堆栈信息
pattern: ^\d{4} # 匹配前缀为数字开头,如果不是日期,该行日志接到上一行后尾
negate: true
match: after
fields: # 自定义属性,用于 Logstash 中
service_name: customer # 产生日志的服务名
log_type: info # 日志文件类型
server_id: ip-address # 服务器ip地址
#----------------------------- Logstash output --------------------------------
output.logstash:
# The Logstash hosts
hosts: ["localhost:5043"] #这里是发送到本地的logstash,要与logstash的input对应,也可以设置为elasticsearch运行
1
nohup ./filebeat -e -c filebeat.yml > ../logs/filebeat.log 2>&1 & echo $! > process.pid
logstash环境搭建
下载与安装
1
2wget https://artifacts.elastic.co/downloads/logstash/logstash-5.6.12.tar.gz
tar -zxvf logstash-5.6.12.tar.gz -C /elk/logstash/配置logstash /config/logstash.conf
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
39input {
beats {
host => "localhost" #监听本地访问的5043端口
port => "5043"
}
beats{
host => "0.0.0.0" #监听任何地址都可访问的5044端口
port => "5044"
}
}
filter {
if [fields][log_type] == 'error' {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:logdate} %{LOGLEVEL:loglevel} %{JAVACLASS:class} %{NUMBER:thread} %{JAVALOGMESSAGE:logmsg}" }
}
date { # 将 kibana 的查询时间改成日志的打印时间,方便之后查询,如果不改的话,kibana会有自己的时间,导致查询不方便
match => ["logdate", "yyyy-MM-dd HH:mm:ss Z", "ISO8601"]
target => "@timestamp"
}
}
if [fields][log_type] == 'info' { # 如果是info类型该怎么格式,这里是重复的,如果有日志格式不一样比如nginx的日志类型,可以在这里自己定义
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:logdate} %{LOGLEVEL:loglevel} %{JAVACLASS:class} %{NUMBER:thread} %{JAVALOGMESSAGE:logmsg}" }
}
date {
match => ["logdate", "yyyy-MM-dd HH:mm:ss Z", "ISO8601"]
target => "@timestamp"
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "%{[fields][service_name]}-%{+YYYY.MM.dd}" # 在es中存储的索引格式,按照“服务名-日期”进行索引
}
}运行
1
nohup bin/logstash -f config/logstash.conf > ../logs/logstash.log 2>&1 & echo $! > process.pid
kibana环境搭建
下载与安装
1
2wget https://artifacts.elastic.co/downloads/kibana/kibana-5.6.12-linux-x86_64.tar.gz
tar -zxvf kibana-5.6.12-linux-x86_64.tar.gz -C /elk/kibana/配置kibana /config/kibana.log
1
2
3server.port: 5601
server.host: "0.0.0.0" #允许其他终端访问
elasticsearch.url: "http://localhost:9200" #elasticsearch访问地址运行
1
nohup bin/kibana > ../logs/kibana.log 2>&1 & echo $! > process.pid
验证
访问5601端口有页面即为正常
使用说明
Kibana使用说明
- 查看系统运行状态
访问http://localhsot:5601/status - 基本使用
在 Discover 页搜索和浏览数据;在 Visualize 页做数据图表映射;在 Dashboard 页创建并查看自定义仪表板。
参考资料:
https://www.elastic.co/guide/cn/kibana/current/index.html
elasticsearch查询语法
- 其中status字段包含active -> status:active
- 其中title字段包含quick或brown。如果省略OR运算符,将使用默认运算符 -> title:(quick OR brown) 或者是title:(quick brown)
- 其中author字段包含精确短语”john smith” -> author:”john smith”
- 其中任何字段book.title,book.content或book.date包含 quick或brown(注意我们需要如何*使用反斜杠转义) ->
- 该字段title具有任何非null值: -> exists:title
- 通配符搜索可以在单个术语上运行,使用?替换单个字符,并*替换零个或多个字符 请注意,通配符查询可能会占用大量内存并执行得非常糟糕 - 只需考虑需要查询多少个术语以匹配查询字符串"a* b* c*"。
- 正则表达式 -> /pattern/
- 模糊 -> quikc~brwn~foks~
- 邻近搜索 邻近搜索允许我们指定短语中单词的最大编辑距离: -> ”fox quick”~5
- 范围 可以为日期,数字或字符串字段指定范围。包含范围用方括号指定,[min TO max]排他范围用大括号指定{min TO max}。
- 保留字符 + - = && || > < ! ( ) { } [ ] ^ “ ~ * ? : \ /
- 分组 可以将多个术语或子句与括号组合在一起,以形成子查询:
- 布尔运算符 首选运算符+(此术语必须存在)和- (此术语不得出现)。
- 提升 使用boost运算符^使一个术语比另一个术语更相关。例如,如果我们想要找到关于fox的所有文件,但我们对quick fox特别感兴趣 -> quick^2 fox