一、安装ElasticSearch
1.ES由java开发,需安装jdk1.8及以上;
2.ES、Kibana、filebeat版本要保持一致,如7.2.0;
1、上传elasticsearch-7.2.0-x86_64.rpm至数据盘;
2、执行安装命令:
rpm -ivh elasticsearch-7.2.0-x86_64.rpm
3、进入 es bin目录
cd /usr/share/elasticsearch/bin
4、修改elasticsearch文件权限
chmod 755 elasticsearch
5、进入/etc/elasticsearch修改jvm.options 中的gc垃圾回收
cd /etc/elasticsearch
vi jvm.options
注释:-XX:+UseConcMarkSweepGC
增加:-XX:+UseG1GC
注意:针对elasticsearch无法启动的问题,修改jvm堆内存、分配内存。Xms 表示堆的初始大小,Xmx 表示可分配的最大内存,默认都是 1GB
vi /etc/elasticsearch/jvm.options 修改为适当参数
6、执行
mkdir /data/es-data (创建数据存放目录)
mkdir /data/es-log (创建日志存放目录)
chown -R elasticsearch:elasticsearch /data/es-*(修改归属)
7、替换/etc/elasticsearch目录下 elasticsearch.yml
8、启动elasticsearch
systemctl enable elasticsearch (设置开机自启动)
systemctl start elasticsearch (启动es)
systemctl status elasticsearch (查看es状态)
9、测试es是否启动
curl -X GET http://localhost:9200
以下为成功示例,未启动成功,无返回结果
10、ES中增加密码
1)在/etc/elasticsearch/elasticsearch.yml中增加配置:
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
2)重启ES服务,执行命令,输入密码
a)在/usr/share/elasticsearch/bin/目录下执行./elasticsearch-setup-passwords interactive(如找不到elasticsearch/bin所在目录,可执行find / -name elasticsearch-setup-passwords 查找)
b)分别为elastic, kibana, logstash_system,beats_system等用户设置密码;
二、安装Kibana
1、上传kibana-7.2.0-x86_64.rpm至数据盘并执行安装命令
rpm -ivh kibana-7.2.0-x86_64.rpm
2、进入/etc/kibana目录
cd /etc/kibana
3、修改配置文件,允许访问的ip地址,配置elasticsearch服务器列表:
vi kibana.yml
server.host: "192.168.31.64"
elasticsearch.hosts: ["http://127.0.0.1:9200"]
kibana可修改为中文展示
vi kibana.yml文件末尾增加一行
i18n.locale: "zh-CN"
4、启动kibana
systemctl enable kibana(设置自启动)
systemctl start kibana (启动kibana)
systemctl status kibana(查看kibana状态)
5、测试:通过浏览器访问kibana
http://192.168.31.64:5601/
6.针对ES需要密码访问,也需在kibana.yml配置文件中增加用户密码
elasticsearch.username: "elastic"
elasticsearch.password: "xxxxx"
三、安装filebeat
常用配置filebeat.yml
1.inputs:配置采集文件路径、内容等;
- type: 指定文件的输入类型log(默认)或者stdin
- enable: true #表示是该log类型配置生效;
- paths:指定采集文件路径,可用正则匹配;
- fields:属性字段,可自定义用于放置到filebeat对象中,需唯一识别;
- encoding: 指定被监控的文件的编码类型,使用plain和utf-8都是可以处理中文日志的
- tail_files: 如果设置为true,Filebeat从文件尾开始监控文件新增内容,把新增的每一行文件作为一个事件依次发送,而不是从文件开始处重新发送所有内容。
【如果此选项设置为true,则Filebeat将开始在每个文件的末尾而不是开头读取新文件。 当此选项与日志轮换结合使用时,可能会跳过新文件中的第一个日志条目。 默认设置为false。此选项适用于Filebeat尚未处理的文件。 如果您之前运行过Filebeat并且文件的状态已经保留,则tail_files将不会应用。要将tail_files应用于所有文件,必须停止Filebeat并删除registry注册表文件。 请注意,这样做会删除以前的所有状态。】 - ignore_older:可以指定Filebeat忽略指定时间段以外修改的日志内容,比如2h(两个小时)或者5m(5分钟)。
【如果启用此选项,Filebeat将忽略在指定的时间跨度之前修改的所有文件。 如果长时间保留日志文件,配置ignore_older会特别有用。 例如,如果要启动Filebeat,但只想发送上周的文件和最新的文件,则可以配置此选项。 您可以使用时间字符串,如2小时(2小时)和5米(5分钟)。 默认值为0,禁用该设置。 注释掉配置与将其设置为0具有相同的效果。
注意:这个ignore_older是针对文件,如果文件最近一次的更新时间超过设定的时间,启动filebeat的时候,就不会去读那个文件,不过如果启动后那个文件又有更新,就会采集更新之后的部分,主要适用用监控一个目录下多个文件的时候】 - fields_under_root:如果该选项设置为true,则新增fields成为顶级目录(顶层目录所放参数一般为系统参数),而不是将其放在fields目录下。自定义的field 会覆盖filebeat 默认的field,采集多个文件时不要开启此选项,开启后会造成多个采集不生效。
- include_lines: 包含哪些正则表达式列表,以匹配你要 Filebeat 包括的行。 Filebeat 仅导出与列表中的正则表达式匹配的行。 默认情况下,所有行均被导出,空行将被忽略,如果指定了多行设置,则在通过 include_lines 过滤行之前,将每条多行消息合并为一行。
- exclude_lines: 不包含的行,与上使用相似;
注意:注意:如果同时定义了 include_lines 和 exclude_lines,Filebeat 将首先执行 include_lines,然后再执行 exclude_lines。 定义两个选项的顺序无关紧要。 即使 exclude_lines 在配置文件中的 include_lines 之前出现,include_lines 选项也将始终在 exclude_lines 选项之前执行。
2.outputs:配置保持采集文件相关;
- 配置es主机信息;
- 配置文件索引信息(需注意fields及自定义属性层级关系);
- username/password配置es访问用户名及密码;
3.pipelines:配置格式化日志格式相关;
4.logging: 配置filebeat客户端日志输入相关;
a)logging.level: debug时可查看调试信息,查看从fiebeat采集到发送全过程
b)从代码的实现角度来看,filebeat大概可以分以下几个模块:- input: 找到配置的日志文件,启动harvester
- harvester: 读取文件,发送至spooler - spooler: 缓存日志数据,直到可以发送至publisher
- publisher: 发送日志至后端,同时通知registrar
- registrar: 记录日志文件被采集的状态
filebeat.inputs:
- type: log
enabled: true
paths:
- D:\IIS-LOGS\xxx\test_ex*
fields:
index: 20231018520014201
tail_files: true
exclude_files: [".gz$"]
exclude_lines: ['^#']
encoding: utf-8
- type: log
enabled: true
paths:
- D:\IIS-LOGSyyyy\test_ex*
fields:
index: 20231018520014202
tail_files: true
exclude_files: [".gz$"]
exclude_lines: ['^#']
encoding: utf-8
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.ilm.enabled: false
setup.template.settings:
index.number_of_shards: 1
output.elasticsearch:
hosts: ["192.168.31.64:9200"]
username: "elastic"
password: "xxx"
indices:
- index: "20231018520014201-%{+YYYY-MM}"
when.equals:
fields:
index: 20231018520014201
- index: "20231018520014202-%{+YYYY-MM}"
when.equals:
fields:
index: 20231018520014202
pipelines:
- pipeline: "IIS-ACCESS-STANDARD"
when.equals:
fields:
index: 20231018520014201
- pipeline: "IIS-ACCESS-STANDARD"
when.equals:
fields:
index: 20231018520014202
logging.level: error
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 3
四、常用
1、查看filebeat是否将数据推送到es,根据配置的索引访问该地址,可根据docs.count推送条数,store.size推送大小查看更新进度。
- 查看所有索引信息:http://localhost:9200/_cat/indices/?v
- 查看某索引下存的信息,查询的信息为索引结构信息(indexName为索引名称)GET方法:http://127.0.0.1:9200/indexName
- 查看某个索引下的所有文档数据
GET方法:http://localhost:9200/indexName/_search(需带下面的请求体,查多个索引的话可以把地址中的indexName改为indexName,indexName) - 删除指定索引方法,用postman的delete方法调用
http://localhost:9200/indexName
返回结果为{“acknowledged”: true}即删除成功 - es通过索引查询相关信息参考博客
2、kibana使用
a)根据filebeat配置中的索引创建索引;
b)使用索引查询数据:
- 选择要查询的索引
- 选择查询后需要展示的字段;
- 输入要查询的内容,字符串需要用"",若不用双引号会匹配成单词;
- 筛选时间,可以设置成时间段,可以设置成距今最近;
- 查询