ELk
- 2020 年 9 月 9 日
- 筆記
E(elasticsearch,数据库)
L(logstash,收集web日志数据)
K(Kibana,用web的形式展示elasticsearch的数据)
一、1. 安装elasticsearch集群
配置java环境 下载elasticsearch
2. vim /etc/elasticsearch/elasticsearch.yml 文件中 修改(前面的数字代表行数,修改配置文件时 把前面的#删除之后 后面的文字必须定格)
17 cluster.name: myelk //配置集群名字
23 node.name: es1 //当前主机名称
54 network.host: 0.0.0.0 // 0.0.0.0(监听所有地址)
68 discovery.zen.ping.unicast.hosts: [“es1”, “es2”, “es3”]
//声明集群里的主机成员有谁,不需要全部写进去 但是在启动主机的时候先启动这几台,
启动其他的话其他的会自动组成集群
集群配置完成之后,可以直接访问 http://任意一台:9200/_cluster/health?pretty 查看集群信息
?pretty 这个是把数据竖着显示能更好的 看清信息
3. 插件使用(装在那台上只能在那台机器上使用 ./plugin install file:///插件的绝对路径)
访问这些插件 //ip:9200/_plugin/插件名
(1)head
展现几区的拓扑结构,通过这个插件可以进行 索引 和 节点 级别的操作
提供一组针对集群的查询API
(2)kopf
elasticsearch的 管理工具
(3)bigbesk
ES集群的监控工具
可以通过他跨查看ES集群的各种状态,如:CPU 、内存
提供对ES集群操作API
插件 head 创建索引
命令行创建索引,插入数据(json 格式)
curl -X PUT “//192.168.1.55:9200/index” -d ‘
> {
> ”settings”:{
> ”index”:{
> ”number_of_shards”:5, //分片数
> ”number_of_replicas”:1 //副本数
> }
> }
> }’
curl -X PUT “//192.168.1.55:9200/tedu/teacher/1” -d ‘{
”职业”:”诗人”,
“名字”:”李白”,
”称号”:”诗仙”,
”年代”:”唐”}’
tedu是索引名字 teacher为表名 1为id(第一行的意思)
4. 导入数据(导入数据的时候如果里面没有索引,表名在_bulk 前面加上 索引,表名)
curl -X POST “//ip:9200/_bulk” –data-binary @logs.jsonl(导入的数据必须是json格式的)
二、安装kibana
数据可视化平台工具
vim /opt/kibana/config/kibana.yml
指定集群中的机器任意一台都可以 其他的需要把注释去掉就行
访问地址 //ip:5601打开之后
全绿说明安装成功
discover 查看数据信息 visualize中可以做饼图
例子访问量排名
三、logstash
安装logstash
1.安装Java环境
2. logstash 没有配置文件需要自己手写
3.
4.logstash工作结构
(1)数据源(web日志)
(2)input(收集数据)
(3)filter(把数据转换,过滤)
(4)output(把数据输出,给elasticsearch)
(5)测试
rubydebug输出内容的时候 会竖着显示 比较友好
5.//github.com/logstash-plugins (logstash的插件地址)
(1)使用input里面的file插件
最后一项是否 必须填写(NO 可以不填)
我们往下拉找 最后一项是yes的
数组中可以填写多个路径
创建 两个log文件 并开启 logstash 程序
logstash 在每次读取文件的时候 都会做一个记录(记录读到日志文件的什么位置)
我们可以自己设置记录文件的位置(生产环境中如果有2个以上的用户维护logstrash,这个记录文件在root下 那么维护起来比较麻烦)
sincedb_path 指定读取记录文件的位置
start_position 有两个参数 beginning 和 end 默认是end,在重启logstash的时候 如果有记录文件那么会从记录文件的位置开始继续读取,如果没有beginning是从文件的开头读取,end是从文件的结尾读取最新的数据(如果是end那么原来的数据会读不到)
type 标签 可以随便写
(2)使用 filter grok插件 我们可以自己编写正则表达式 或者 用宏表达式(自己有的)
正则表达式有匿名分组和命名分组
命名正则(?<正则的名字>匹配的内容)固定格式
上面的是手动写的 ,logstash 中有提前准备好的表达式
这个文档里写的是 提前准备好的宏表达式
该文档分为两列 第一列为宏的名字 第二列为正则表达式匹配的方法
调用的话%{宏的名字:自己的命名} (也可以不用自己命名 只写宏的名字调用)
直接调用 上面的宏和手写的是一样的
(3)使用putput中的elasticsearch插件
下面 fiush_size是 当大小达到2000字节之后 就像elasticsearch 中写入 数据
idle_flush_time是 10秒 写入一次 防止还没到达2000字节 不向elasticsearch中写入数据
指定 elasticsearch的机器 和 指定创建的库的库名(其实可以不用写 hosts,index(库名) 参数都是默认有参数 hosts 默认的是 127.0.0.1 本机 index默认的是 logshtash-yyy-mmm-ddd 如果elasticsearch和logstash安装在同一台机器那么 hosts 就不用修改)
6. 企业中web服务器多 每台都配置logstash 比较麻烦。 可以用filebeat + logstash,filebeat负责把日志数据传输给logstash中
在logstash配置文件中只需要加上一个端口号,在启动时,logstash会自动检测5044端口
(1)在web服务器安装filebeat
yum -y install filebeat
(2)修改 filebeat的配置文件(/etc/filebeat/filebeat.yaml)
默认的是logstash是注释的 elasticsearch 没有注释 我们把elasticsearch的行给注释了 把logstash的行注释去掉
需要标签(分辨是什么服务的日志)的话可以再 filebeat配置文件中
大约在72行 标记类型
配置完filebeat之后可以在logstash配置文件中 加上 if 判断