ELK是一套完整的日志集中处理方案。
E:ElasticSearck ES 分布式索引型非关系数据库 存储logstash输出的日志 全文检索引擎,保存的格式是json格式
L:logstash 基于java语言开发的,数据收集引擎。日志的收集,可以对数据进行过滤,分析,汇总,以标准格式输出
K:Kiabana 是es的可视化工具。对es存储的数据进行可视化展示,分析和检索。
ELK F K
F
filebeat:轻量级的开源日志文件数据搜集器,logstash占用系统资源比较大,属于重量级,有了filebeat可以节省资源,可以通过filebeat和logstash实现义远程数据收集。
filebeat不能对数据进行标准输出,不能输出为es格式的数据,所以需要logstash把filebeat数据做标准化处理。
k
kafka 消息队列
实验环节
192.168.233.10 es1 2/4G
192.168.233.20 es2 2/4G
192.168.233.30losgtash kibana nginx/http 4/8G
同时配置es1和es2
systemctl stop firewalld
setenforce 0
关闭安全机制和防火墙
1、环境准备 设置Java环境
1 yum -y install java 2 java -version openjdk version "1.8.0_131" OpenJDK Runtime Environment (build 1.8.0_131-b12) OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
2、部署 Elasticsearch 软件 安装elasticsearch—rpm包 上传elasticsearch-6.7.2.rpm到/opt目录下
cd /opt
rpm -ivh elasticsearch-6.7.2.rpm
修改elasticsearch主配置文件
1 cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
2 vim /etc/elasticsearch/elasticsearch.yml
17行取消注释,指定集群名字
cluster.name: my-elk-cluster
23行取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
node.name: node1
node.master: true #是否master节点,false为否
node.data: true #是否数据节点,false为否
33行取消注释,指定数据存放路径
path.data: /var/lib/elasticsearch
37行取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch
43行取消注释,避免es使用swap交换分区,可以不注释
bootstrap.memory_lock: true
55行取消注释,设置监听地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
59行取消注释,ES 服务的默认监听端口为9200
http.port: 9200 #指定es集群提供外部访问的接口
transport.tcp.port: 9300 #指定es集群内部通信接口
68行取消注释,集群发现通过单播实现,指定要发现的节点
discovery.zen.ping.unicast.hosts: ["192.168.233.12:9300", "192.168.233.13:9300"]
查看配置文件命令,在命令行显示
grep -v "^#" /etc/elasticsearch/elasticsearch.yml
启动elasticsearch是否成功开启
systemctl start elasticsearch.service
systemctl enable elasticsearch.service
netstat -antp | grep 9200
查看节点信息 浏览器访问 http://192.168.124.10:9200 、 http://192.168.124.20:9200 查看节点 Node1、Node2 的信息。
3、安装 Elasticsearch-head 插件 Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装, 需要使用npm工具(NodeJS的包管理工具)安装。 安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。 node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器, 任何基于 webkit 浏览器做的事情,它都可以做到
编译安装 node 上传软件包 node-v8.2.1.tar.gz 到/opt
yum install gcc gcc-c++ make -y
cd /opt
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make -j 4 make install
安装 phantomjs 上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到
cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd /opt/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin
安装 Elasticsearch-head 数据可视化工具 上传软件包 elasticsearch-head-master.zip 到/opt
cd /opt
unzip elasticsearch-head-master.zip
cd elasticsearch-head-master/
npm install //安装依赖包
速度慢,可以指定为淘宝镜像
npm config set registry http://registry.npm.taobao.org/
修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml
末尾添加以下内容
http.cors.enabled: true #开启跨域访问支持,默认为 false
http.cors.allow-origin: "*" #指定跨域访问允许的域名地址为所有
重启服务
systemctl restart elasticsearch
启动 elasticsearch-head 服务 必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。
cd /opt/elasticsearch-head-master
npm run start &
elasticsearch-head 监听的端口是 9100 netstat -natp |grep 9100
通过 Elasticsearch-head 查看 Elasticsearch 信息 通过浏览器访问 http://192.168.124.10:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。
插入索引 #通过命令插入一个测试索引,索引为 index-demo,类型为 test。 curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}' //输出结果如下: { "index" : "index-demo", "type" : "test", "id" : "1", "version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "created" : true }
1、es的主从和数据模式 node.master: true es数据库的主从类型 true false node.data: true 数据节点,是否保存数据,logstash发送数据,节点是否接受以及保存。
2、es如何创建,修改,删除数据 数据管理 通过http的方式 post方式修改数据
curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
对应的就是本地数据的地址 ip+端口
index-demo
创建索引分片的名称
test
数据的名称
1
数据的id字段
?pretty&pretty
参数设定为json格式
-d
数据的具体内容
"user":"zhangsan","mesg":"hello world"
修改数据的方式:
curl -X POST 'localhost:9200/index-demo/test/1/_update?pretty' -H 'Content-Type: application/json' -d '{ "doc": { "user": "zhangsan", "mesg": "hello1 world1" } }'
删除数据的方式:
curl -X DELETE 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello1 world1"}'
Logstash 一般部署在需要监控其日志的服务器。在本案例中,Logstash 部署在 nginx服务器上, 用于收集 nginx 服务器的日志信息并发送到 Elasticsearch。
安装Java环境
yum -y install java
java -version
安装logstash
上传软件包 logstash-6.7.2.rpm 到/opt目录下
cd /opt
rpm -ivh logstash-6.7.2.rpm
systemctl start logstash.service
systemctl enable logstash.service
做一个软链接
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
可以指定logstash的工作目录,默认为:/etc/logstash/conf.d
path.config: /opt/log
测试 Logstash
Logstash 命令常用选项:
-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
-e:从命令行中获取,输入、输出后面跟着字符串,
该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
-t:测试配置文件是否正确,然后退出。
定义输入和输出流:
#输入采用标准输入,输出采用标准输出(类似管道),新版本默认使用 rubydebug 格式输出
logstash -e 'input { stdin{} } output { stdout{} }'
Ruby 调试信息使用 rubydebug 格式进行输出,显示了事件的各个字段和元数据。
www.baidu.com #键入内容(标准输入)
{
"@timestamp" => 2020-12-22T02:15:39.136Z, #输出结果(标准输出处理后的结果)
"@version" => "1",
"host" => "apache",
"message" => "www.baidu.com"
}
#使用 Logstash 将信息写入 Elasticsearch 中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.124.10:9200","192.168.124.20:9200"] } }'
输入 输出 对接
......
www.baidu.com #键入内容(标准输入)
www.sina.com.cn #键入内容(标准输入)
www.google.com #键入内容(标准输入)
//结果不在标准输出显示,而是发送至 Elasticsearch 中,可浏览器访问 http://192.168.124.10:9100/ 查看索引信息和数据浏览。
编写一个收集日志的文件
input {
file{
path =>"/var/log/messages"
type =>"/system"
start_position =>"beginning"
}
}
output {
elasticsearch {
hosts=>["192.168.124.10:9200","192.168.124.20:9200"]
index =>"system-%{+YYYY.MM.dd}"
}
}
开启收集日志的命令
logstash -f system.conf --path.data /opt/test2 &
进入浏览器访问192.168.124.30:5601