什么是ELK:
ELK主要由ElasticSearch、Logstash和Kibana三个开源工具组成,还有其它轻量型数据采集器,如filebeat等组成的日志收集分析系统。
Elasticsearch :分布式搜索引擎,具有高可伸缩、高可靠、易管理等特点,可以用于全文检索、结构化检索和分析,并能将这三者结合起来,Elasticsearch 是用Java 基于 Lucene 开发,现在使用最广的开源搜索引擎之一。
Logstash :数据收集处理引擎,支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。
Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。
Filebeat:轻量级数据收集引擎。Filebeat 所占用的系统资源几乎是微乎及微。它是基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。
安装说明:
1、Elasticsearch、Logstash、Kibana、Filebeat安装的版本号必须全部一致,不然会出现kibana无法显示web页面。
2、部署组件的服务器时间必须一致,否则会出现日志无法显示。
安装部署
1、安装elasticsearch
官方网站:
https://www.elastic.co/cn/downloads/elasticsearch
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.9.1-linux-x86_64.tar.gz
Elasticsearch的功能:搜索、全文检索、分析数据、处理海量数据PB,对海量数据进行近实时的处理(ES可以自动将海量数据分散到多台服务器上去存储和检索)、高可用高性能分布式搜索引擎数据库
Elasticsearch的应用场景:网页搜索、新闻搜索、商品标签、日志收集分析展示
elasticsearch的安装方式:二进制包(elasticsearch-8.9.1-linux-x86_64.tar.gz)安装,依赖于java,所以首先安装java环境-jdk、docker方式安装
我们使用docker方式安装
Linux下安装部署Docker二进制版本
https://www.osyunwei.com/archives/13930.html
1.1创建用于elk的网络
docker network create elk
1.2部署docker镜像
#创建Elasticsearch容器
docker run --restart=always -d \
--name=elasticsearch \
-v es-data:/usr/share/elasticsearch/data \
-e ES_JAVA_OPTS="-Xms256m -Xmx512m" \
-e discovery.type="single-node" \
-e "xpack.security.enabled=false" \
--net elk \
-p 9200:9200 -p 9300:9300 \
docker.elastic.co/elasticsearch/elasticsearch:8.9.1
#测试elasticsearch
curl http://127.0.0.1:9200/_cat/health
curl http://localhost:9200/_cat/health
2、安装kibana
2.1创建kibana容器
docker run --restart=always -d \
--name=kibana \
-e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 \
-e I18N_LOCALE=zh-CN \
--net elk \
-p 5601:5601 \
docker.elastic.co/kibana/kibana:8.9.1
#测试Kibana
http://192.168.21.101:5601
docker ps #查看容器
3、安装Filebeat(部署在被采集的日志服务器上)
https://www.elastic.co/cn/downloads/past-releases
https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.9.1-x86_64.rpm
#安装
rpm -ivh filebeat-8.9.1-x86_64.rpm
systemctl enable filebeat #设置开机启动
systemctl start filebeat #启动
systemctl restart filebeat #重启
systemctl status filebeat #查看状态
ps -ef |grep filebeat #查看进程
4、使用filebeat采集日志
4.1采集系统日志
vi /etc/filebeat/filebeat.yml #修改filebeat配置文件
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
- /var/log/messages
setup.ilm.enabled: false
setup.template.name: "syslog"
setup.template.pattern: "syslog-*"
output.elasticsearch:
hosts: ["http://192.168.21.101:9200"]
index: "syslog-%{+yyyy.MM.dd}"
:wq! #保存退出
systemctl restart filebeat #重启
filebeat test config #检查配置文件是否正确
打开Management-Stack Management-数据-索引管理-数据流
http://192.168.21.101:5601/app/management
Kibana-数据视图-创建数据视图
Analytics-Discover
可以看到已经有数据显示了
4.2采集nginx日志
vi /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
fields_under_root: true
fields:
type: access
project: ms
app: nginx
- type: log
enabled: true
paths:
- /var/log/nginx/error.log
fields_under_root: true
fields:
type: error
project: ms
app: nginx
setup.ilm.enabled: false
setup.template.name: "ms-nginx"
setup.template.pattern: "ms-nginx-*"
output.elasticsearch:
hosts: ["http://192.168.21.101:9200"]
indices:
- index: "ms-nginx-access-%{+yyyy.MM.dd}"
when.contains:
type: "access"
- index: "ms-nginx-error-%{+yyyy.MM.dd}"
when.contains:
type: "error"
:wq! #保存退出
systemctl restart filebeat #重启
filebeat test config #检查配置文件是否正确
systemctl status filebeat #查看状态
5、设置Elasticsearch和Kibana登录用户名和密码
Elasticsearch和Kibana默认情况下均未使用用户登录验证,为了数据安全我们需要配置用户验证。
5.1、在创建Elasticsearch容器的时候,将参数设置为true
-e "xpack.security.enabled=true"
5.2、修改Elasticsearch容器elasticsearch.yml配置文件
#以下是通过docker cp命令将配置文件复制到主机、编辑并再次复制回容器的步骤
docker cp elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml .
vi elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
:wq! #保存退出
#把修改后的文件拷贝到容器
docker cp elasticsearch.yml elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml
#重启容器
docker restart elasticsearch
5.3、设置登录密码
docker exec -it elasticsearch /bin/bash #进入容器
./bin/elasticsearch-setup-passwords auto #自动生成密码
#####################################################
Changed password for user apm_system
PASSWORD apm_system = tBJjOUtT25ZvBOEvRMPY
Changed password for user kibana_system
PASSWORD kibana_system = J3gj9CiWEPqETAeWRzTq
Changed password for user kibana
PASSWORD kibana = J3gj9CiWEPqETAeWRzTq
Changed password for user logstash_system
PASSWORD logstash_system = NUqM2ZfwQwp9l5n5JKS3
Changed password for user beats_system
PASSWORD beats_system = xIH9zgiLsFZHjiy1s8NQ
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = sznAupLag25MBOfItx4e
Changed password for user elastic
PASSWORD elastic = I6N4ABKR=iU0Qe5UZ-9K
#####################################################
#./bin/elasticsearch-setup-passwords interactive #交互式设置密码
#elasticsearch-reset-password -u elastic #重置elastic用户的密码
#elasticsearch-reset-password -u kibana #重置elastic用户的密码
#####################################################
#修改elastic为指定的密码
curl -XPOST -u elastic 'http://localhost:9200/_security/user/elastic/_password' -H "Content-Type: application/json" -d'
{
"password": "123456"
}
'
#修改kibana为指定的密码
curl -XPOST -u kibana 'http://localhost:9200/_security/user/kibana/_password' -H "Content-Type: application/json" -d'
{
"password": "123456"
}
'
#####################################################
exit #退出容器
#登录验证
curl http://localhost:9200 -u elastic
http://192.168.21.101:9200/
登录账号:elastic
密码:123456
5.4、修改kibana配置文件kibana.yml
#以下是通过docker cp命令将配置文件复制到主机、编辑并再次复制回容器的步骤
docker cp kibana:/usr/share/kibana/config/kibana.yml .
vi kibana.yml
#添加这2行,此处设置kibana的用户名和密码,仅可用于连接elasticsearch并与之通信, 不能用于kibana登录
elasticsearch.username: "kibana"
elasticsearch.password: "123456"
:wq! #保存退出
#把修改后的文件拷贝到容器
docker cp kibana.yml kibana:/usr/share/kibana/config/kibana.yml
docker restart kibana #重启kibana容器
#验证登录
curl http://localhost:5601 -u elastic
http://192.168.21.101:5601/
登录账号:elastic
密码:123456
#kibana配置的时候要写kibana用户
#kibana登录的时候使用elastic用户,kibana用户仅是用来连接elasticsearch并与之通信, 不能用于kibana登录
#API访问es验证
请求地址:http://elastic:123456@192.168.21.101:9200
相关命令:
docker stop dd4cffaa8967 #关闭容器
docker start dd4cffaa8967 #启动容器
docker network ls #查看网络
docker network inspect elk #详细查看网络
docker network rm elk #删除网络
docker volume ls #查看卷
docker volume inspect es-data #详细查看卷
docker volume rm es-data #删除卷
docker ps -aq #列出所有的容器ID
docker stop $(docker ps -aq) #停止所有的容器
docker rm $(docker ps -aq) #删除所有的容器
docker rmi $(docker images -q) #删除所有的镜像
docker image ls #查看当前所有镜像
docker images #查看镜像
docker image save docker.elastic.co/kibana/kibana:8.9.1 > /tmp/kibana-8.9.1.tar.gz #导出镜像
docker image save docker.elastic.co/elasticsearch/elasticsearch:8.9.1 > /tmp/elasticsearch-8.9.1.tar.gz #导出镜像
docker load -i /tmp/elasticsearch-8.9.1.tar.gz #导入镜像
docker image tag docker.elastic.co/elasticsearch/elasticsearch:8.9.1 myelasticsearch:8.9.1 #修改镜像名称
rpm -qa | grep filebeat
rpm -e filebeat-8.9.1-x86_64.rpm #卸载
#删除所有容器
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
docker network rm elk
docker volume rm es-data
至此,Docker安装部署ELK Stack完成。