指定ES的分片和副本数量

ES索引名称的创建规范

1
2
3
4
5
1.名称最好见名知意,最好和你实际写入的业务有关;
2.名称不要以"."开头,以"."开头多索引我们称之为"隐藏索引";
3.一般隐藏索引都是组件去创建,建议不要人为创建,默认kibana就隐藏了以"."开头的索引
4.字符支持小写字母,数字及连字符(-),和内置一些变量比如"%{...}";
5.不要出现特殊字符;

1.通过ES的API操作副本和分片

1
2
3
4
5
6
7
8
9
10
curl -X PUT 'http://10.0.0.211:9200/school' \
-H 'Content-Type: application/json' \
-d '{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 0
}
}'

#创建索引school,主分片5,副本0

2.通过索引模板操作副本和分片

索引模板:创建索引时,会自动匹配是否有对应的索引模板,若匹配则根据索引模板创建。

2.1创建索引模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
curl -X PUT 'http://10.0.0.211:9200/_index_template/linux-school' \
-H 'Content-Type: application/json' \
-d '{
"template": {
"settings": {
"number_of_replicas": 0,
"number_of_shards": 5
}
},
"index_patterns": [
"linux-school*"
]
}'

#注释:index_patterns,这里是用于匹配索引的,凡是索引是linux-school的都会关联此模板

image-20241002233116968

验证模板

1
2
3
4
[root@elk01:2 ~]# curl -X PUT 'http://10.0.0.211:9200/linux-school-01'
{"acknowledged":true,"shards_acknowledged":true,"index":"linux-school-01"}

#重新加载索引管理,发现创建的索引关联了模板,创建了5个分片

image-20241002233631403

2.2图形化创建索引模板

recording

1
2
3
4
5
验证索引模板:
[root@elk01:2 ~]# curl -X PUT 'http://10.0.0.211:9200/student01'
{"acknowledged":true,"shards_acknowledged":true,"index":"student01"}

索引管理里查看新创建的student-01索引是否是 3分片,0副本 自然是OK的

3.通过filebeat组件操作副本和分片

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
[root@elk01:2 ~]# cat /etc/filebeat/06-nginx-es.yaml 
filebeat.inputs:
- type: log
json:
keys_under_root: true
add_error_key: true
overwirte_keys: true
paths:
- /var/log/nginx/access.log*

output.elasticsearch:
hosts: ["http://10.0.0.211:9200","http://10.0.0.212:9200","http://10.0.0.213:9200"]
# 自定义索引名称 ,前提是关闭索引的生命周期
index: "test-filebeat-%{+yyyy.MM.dd}"

#关闭索引生命周期
setup.ilm.enabled: false
#定义索引模板的名称
setup.template.name: "test-filebeat"
#定义模板的匹配模式
setup.template.pattern: "test-filebeat*"
#若索引模式模板存在,是否覆盖
setup.template.overwrite: false
#定义索引模板设置
setup.template.settings:
index.number_of_shards: 5
index.number_of_replicas: 0

#如下索引管理里便创建了一个名为test-filebeat的索引和test-filebeat的模板

image-20241003002143618

提示:基于filebeat配置的ES集群的索引及分片,副本信息,本质上创建时会自动转换为ES的http请求进行创建索引。

多个intput写到不同索引

需求:多个inputs写入到ES集群里的不同索引里

1.编写配置文件

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
45
[root@elk01:1 ~]# cat /etc/filebeat/07-nginx-es.yaml 
filebeat.inputs:
- type: log
#给事件打标签为file
tags: "file"
paths:
- /tmp/test.log

- type: tcp
tags: "tcp"
host: "0.0.0.0:9000"

- type: log
tags: "nginx"
json:
keys_under_root: true
add_error_key: true
overwirte_keys: true
paths:
- /var/log/nginx/access.log*

output.elasticsearch:
hosts: ["http://10.0.0.211:9200","http://10.0.0.212:9200","http://10.0.0.213:9200"]
#index: "student-%{+yyyy.MM.dd}"
#多个索引模式
indices:
- index: "study-file-%{+yyyy.MM.dd}"
when.contains:
tags: "file"
- index: "study-tcp-%{+yyyy.MM.dd}"
when.contains:
tags: "tcp"
- index: "study-nginx-%{+yyyy.MM.dd}"
when.contains:
tags: "nginx"

setup.ilm.enabled: false
setup.template.name: "study"
setup.template.pattern: "study*"
setup.template.overwrite: false
setup.template.settings:
index.number_of_shards: 8
index.number_of_replicas: 0

#给每个事件打上专属标签,索引里根据标签判断写入哪里

2.启动filebeat实例

1
[root@elk01:0 ~]# filebeat -e -c /etc/filebeat/07-nginx-es.yaml 

3.测试tcp数据

1
2
3
[root@elk01:0 ~]# echo "999" | nc 10.0.0.211 9000
[root@elk01:0 ~]# echo "666" | nc 10.0.0.211 9000
[root@elk01:0 ~]# echo "000" | nc 10.0.0.211 9000

4.测试nginx

1
[root@elk01:0 ~]# while true; do curl 10.0.0.211;sleep 0.5;done

5.测试本地文件

1
[root@elk01:0 ~]# echo ‘hello world' >/tmp/test.log

6.kibana基于Discover分析数据

​ 6.1查看索引是否都创建完成

image-20241003114353521

6.2创建索引模式为 study*

6.3 进入Discover,选择相应字段,查看分析数据

image-20241003114810243

控制多个input源的是否启用

使用enabled,控制inputs多个源是否启用,true / false

1
2
3
4
5
6
7
8
9
10
11
filebeat.inputs:
- type: log
# 配置该代码块是否执行,默认值为true,若不想要加载,则设置为false即可
enabled: false
tags: "nginx"
json:
keys_under_root: true
add_error_key: true
overwirte_keys: true
paths:
- /var/log/nginx/access.log*

filebeat 多实例

1.启动第一个实例

1
2
3
4
5
6
7
8
9
[root@elk01:0 ~]# cat /etc/filebeat/02-tcp-console.yaml 
filebeat.inputs:
- type: tcp
host: "0.0.0.0:9000"

output.console:
pretty: true

[root@elk01:1 ~]# filebeat -e -c /etc/filebeat/02-tcp-console.yaml

2.启动第二个实例

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
[root@elk01:2 ~]# cat /etc/filebeat/04-nginx-console.yaml 
filebeat.inputs:
- type: log
json:
keys_under_root: true
add_error_key: true
overwirte_keys: true
paths:
- /var/log/nginx/access.log*

output.console:
pretty: true

[root@elk01:1 ~]# filebeat -e -c /etc/filebeat/04-nginx-console.yaml
2024-10-03T12:15:44.735+0800 INFO instance/beat.go:698 Home path: [/usr/share/filebeat] Config path: [/etc/filebeat] Data path: [/var/lib/filebeat] Logs path: [/var/log/filebeat] Hostfs Path: [/]
2024-10-03T12:15:44.737+0800 ERROR instance/beat.go:1027 Exiting: 'data path already locked by another beat'. Please make sure that multiple beats are not sharing the same data path (path.data).
Exiting: data path already locked by another beat. Please make sure that multiple beats are not sharing the same data path (path.data).

#启动第二个的实例时候提示,数据目录已经被其他的实例锁定了,查看/var/lib/filebeat/目录里存在一个锁文件
#不能共用数据目录,当退出这个实例,这个锁文件也会消失
[root@elk01:1 ~]# ll /var/lib/filebeat/
-rw------- 1 root root 0 Oct 3 12:15 filebeat.lock

#启动第二个实例,需要指定数据目录
[root@elk01:2 ~]# filebeat -e -c /etc/filebeat/04-nginx-console.yaml --path.data /tmp/nginx-filebeat

总结

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
总结:
- 1.同一个节点可以启动多个filebeat实例,但需要指定不同的数据目录;
- 2.如果filebeat采集多个数据源有两种常见的解决方案,要么配置多个input,要么使用多实例;

如果所有配置都放在同一个filebeat优缺点:
优点:
部署方便,启动一个实例即可。
缺点:
-1.当多个input中有任意一个需要修改时,在重启期间,其他的input都会受到影响。
-2.当配置多事,多个input配置比较繁琐;

如果所有配置都使用不同filebeat,多实例优缺点:
优点:
- 1.实现了配置文件和程序的解耦,说白了,就是一个实例挂掉,不会影响到其他实例;
- 2.配置简单
缺点:
- 1.部署不方便,要同时部署多个filebeat,且数据目录需要单独指定维护;