ELK是什么?
是一套完整的日志集中处理方案。
E:ElasticSearch 简称ES 分布式索引型非关系型数据库 存储logstash输出的日志 全文检索引擎,保存的格式是json格式
L:logstash 基于java语言开发的,数据收集引擎。日志的收集,可以对数据进行过滤,分析,汇总,以标准格式输出
K:Kiabana 是ES的可视化工具。对ES存储的数据进行可视化展示,分析和检索。
F filebeat: 轻量级的开源日志文件数据收集器。logstash占用系统资源比较大,属于重量级。
有了filebeat开源节省资源,可以通过filebeat和logstash实现远程数据收集。
filebeat不能对数据进行标准输出,不能输出为ES格式的数据,所以需要logstash把filebeat数据做标准化处理。
K kafka消息队列?
192.168.60.82 ES1 2/4G
192.168.60.83 ES2 2/4G
192.168.60.81 losgtash kibana nginx/http 4/8G
node:基于谷歌浏览器的运行环境
phantomjs:虚拟浏览器
es-head-master:es的独立可视化工具,可以实现分片索引数据的可视化展示
#关闭防火墙 systemctl stop firewalld setenforce 0 #yum安装java yum -y install java #设置Java环境 java -version #将elasticsearch-6.7.2.rpm拖到opt目录下 [root@elk3 opt]# rz -E rz waiting to receive. #解压这个压缩包 rpm -ivh elasticsearch-6.7.2.rpm
#修改elasticsearch主配置文件 cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak 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.60.82:9300", "192.168.60.83:9300"] grep -v "^#" /etc/elasticsearch/elasticsearch.yml #重启这个服务 systemctl restart elasticsearch.service #检查端口 netstat -antp | grep 9200
#上传软件包 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 && make install
#上传软件包 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-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/ #再次安装 npm install
vim /etc/elasticsearch/elasticsearch.yml ...... --末尾添加以下内容-- http.cors.enabled: true #开启跨域访问支持,默认为 false http.cors.allow-origin: "*" #指定跨域访问允许的域名地址为所有 systemctl restart elasticsearch
#必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。 cd /opt/elasticsearch-head-master npm run start & > [email protected] start /opt/elasticsearch-head-master > grunt server Running "connect:server" (connect) task Waiting forever... Started connect web server on http://localhost:9100 #elasticsearch-head 监听的端口是 9100 netstat -natp |grep 9100
通过浏览器访问 http://192.168.60.82: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 } curl -X DELETE 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
浏览器访问 http://192.168.233.12:9100/ 查看索引信息,可以看见索引默认被分片5个,并且有一个副本。 点击“数据浏览”,会发现在node1上创建的索引为 index-demo,类型为 test 的相关信息。
Elasticsearch 的可视化工具中,以索引分区(Shard)为单位, 可能采用不同的标识颜色来表示它们的状态。黑色的边框通常表示主分片(Primary Shard)。
在 Elasticsearch 中,索引被分成多个分区,这些分区称为分片。 每个索引可能包含一个或多个主分片以及它们的副本。主分片是数据的主要存储, 副本用于提高冗余和可用性。
hostnamectl set-hostname apache
yum -y install httpd systemctl start httpd
yum -y install java java -version
#上传软件包 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
定义输入和输出流:
#输入采用标准输入,输出采用标准输出(类似管道),新版本默认使用 rubydebug 格式输出 logstash -e 'input { stdin{} } output { stdout{} }' #使用 rubydebug 输出详细格式显示,codec 为一种编解码器 logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
#使用 Logstash 将信息写入 Elasticsearch 中 logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.60.82:9200","192.168.60.83:9200"] } }' 输入 输出 对接 ...... www.baidu.com #键入内容(标准输入) www.sina.com.cn #键入内容(标准输入) www.google.com #键入内容(标准输入) //结果不在标准输出显示,而是发送至 Elasticsearch 中,可浏览器访问 http://192.168.233.12:9100/ 查看索引信息和数据浏览。
[root@apache opt]# cd /etc/logstash/conf.d/ [root@apache conf.d]# pwd /etc/logstash/conf.d [root@apache conf.d]# ls [root@apache conf.d]# vim system.conf input { file{ path =>"/var/log/messages" type =>"system" start_position =>"beginning" } } output { elasticsearch { hosts=> ["192.168.60.82:9200", "192.168.60.83:9200"] index =>"system-%{+YYYY.MM.dd}" } } #启动这个配置文件 logstash -f system.conf --path.data /opt/test2 & #将kibana-6.7.2-x86_64.rpm装到opt目录下 [root@apache opt]# rz -E rpm -ivh kibana-6.7.2-x86_64.rpm
更改kibana的配置文件
vim /etc/kibana/kibana.yml 2 server.port: 5601 #取消注释 7 server.host: "0.0.0.0" #使任意主机都可以建立联系 28 elasticsearch.hosts: ["http://192.168.60.82:9200","http://192.1 68.60.83:9200"] #将28行取消注释并更改 96 logging.dest: /var/log/kibana.log #将kibana的图形化日志位置更改 113 i18n.locale: "zh-CN" #将kibana的语言模式改为中文 37 kibana.index: ".kibana" #打开kibana的索引名称 touch /var/log/kibana.log #创建一个日志文件,这个文件不会自动生成 chown kibana:kibana /var/log/kibana.log #将日志文件的所有者和所在组更改 chmod 777 /var/log/kibana.log #给该文件赋权 systemctl restart kibana.service #将kibana服务启动 systemctl enable kibana.service #将kobana服务设置为开机自启
1、es的主从和数据模式
node.master: true
es数据库的主从类型 true false
node.data: true
数据节点,是否保存数据,logstash发送数据,节点是否接受以及保存
es如何创建,修改,删除数据 数据管理
通过http的方式
post方式修改数据
创建数据
curl -X DELETE '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"}'