ELK
ELK日志系统
ELK是什么?
是一套完整的日志集中处理方案。
E:ElasticSearch 简称ES 分布式索引型非关系型数据库 存储logstash输出的日志 全文检索引擎,保存的格式是json格式
L:logstash 基于java语言开发的,数据收集引擎。日志的收集,可以对数据进行过滤,分析,汇总,以标准格式输出
K:Kiabana 是ES的可视化工具。对ES存储的数据进行可视化展示,分析和检索。
ELK的架构------------日志集中管理
ELK F K
F filebeat: 轻量级的开源日志文件数据收集器。logstash占用系统资源比较大,属于重量级。
有了filebeat开源节省资源,可以通过filebeat和logstash实现远程数据收集。
filebeat不能对数据进行标准输出,不能输出为ES格式的数据,所以需要logstash把filebeat数据做标准化处理。
K kafka消息队列?
ELK实验:
架构:
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的独立可视化工具,可以实现分片索引数据的可视化展示
操作:
1、ES1和ES2上都需要的操作:
#关闭防火墙
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
2、修改ES的主配置文件
#修改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
3、安装 Elasticsearch-head 插件
1)编译安装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 && make install
2)安装 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
3)安装 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/
#再次安装
npm install
4)修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml
......
--末尾添加以下内容--
http.cors.enabled: true #开启跨域访问支持,默认为 false
http.cors.allow-origin: "*" #指定跨域访问允许的域名地址为所有
systemctl restart elasticsearch
5)启动 elasticsearch-head 服务
#必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。
cd /opt/elasticsearch-head-master
npm run start &
> elasticsearch-head@0.0.0 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
6)通过 Elasticsearch-head 查看 Elasticsearch 信息
通过浏览器访问 http://192.168.60.82:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。
7)插入索引
#通过命令插入一个测试索引,索引为 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 中,索引被分成多个分区,这些分区称为分片。 每个索引可能包含一个或多个主分片以及它们的副本。主分片是数据的主要存储, 副本用于提高冗余和可用性。
4、在 Apache 节点上操作
1)更改主机名
hostnamectl set-hostname apache
2)安装Apahce服务(httpd)
yum -y install httpd
systemctl start httpd
3)安装Java环境
yum -y install java java -version
4)安装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
5)测试 Logstash
定义输入和输出流:
#输入采用标准输入,输出采用标准输出(类似管道),新版本默认使用 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/ 查看索引信息和数据浏览。
5、将日志文件可视化
[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服务设置为开机自启
6、最后结果
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"}'