基于 Docker 构建 ELK(Elasticsearch、Logstash、Kibana)
Docker简介
Docker 是一个被广泛使用的开源容器引擎,是一种操作系统级别的虚拟化技术,它以一种特殊进程的方式运行于宿主机上,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,它依赖于liunx内核特性:namespace(名字空间进行资源的隔离)和cgroups(限制、记录任务组所使用的物理资源)
一个完整的Docker有以下几个部分组成:
-
DockerClient客户端
-
Docker Daemon守护进程
-
Docker Image镜像
-
DockerContainer容器
话不多说,先简要介绍到这里,还想了解更多的小伙伴可自行百度搜索,这里重点介绍实操内容。
Docker安装
安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
当看到complete时代表安装完成。
添加aliyun docker-ce yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
重建yum缓存
yum clean all
yum makecache
查看可用的docker版本
yum list docker-ce.x86_64 --showduplicates | sort -r
这里建议根据实际情况,选择较新的稳定版本,我这里选择的是docker-ce-20.10.6
yum install -y docker-ce-20.10.6-* docker-ce-cli-20.10.6-*.x86_64
等待安装ing。。。
安装完成后,执行命令查看docker版本,有如下回显代表安装成功
docker -v
Docker启动
临时启动Docker
systemctl start docker
设置开机自动启动
systemctl enable docker
查看Docker运行状态
systemctl status docker
查看Docker容器版本信息
docker version
接下来要配置镜像加速器。这一步是很有必要的。
一是可以提升镜像下载速度:默认情况下,Docker从官方镜像仓库(Docker Hub)下载镜像。但是由于网络的限制或地理位置的原因,有时候从官方仓库下载镜像的速度可能会较慢。配置镜像加速器可以将镜像下载源切换到国内的镜像站点,从而加快镜像下载速度,提高开发和部署效率。
二是解决访问限制问题:有些时候,访问官方仓库可能会受到网络的限制,例如在某些特殊环境下无法正常访问国外网站。配置镜像加速器可以解决这样的问题,通过使用国内的镜像站点,避免了对官方仓库的直接访问,确保能够正常下载和使用镜像。
配置Docker镜像加速器非常简单,只需要将加速器的地址添加到Docker配置文件中即可,这里我们选择阿里云的加速器地址。
先创建目录/etc/docker
sudo mkdir -p /etc/docker
将文本内容写入指定文件的常用命令
sudo tee /etc/docker/daemon.json <<-'EOF'
写入镜像加速器配置
{
"registry-mirrors": ["https://e7n1ndig.mirror.aliyuncs.com"]
}
EOF
然后重新启动Docker服务,配置即可生效。
sudo systemctl daemon-reload //重载配置
sudo systemctl restart docker //重启服务
准备ELK镜像
拉取elasticsearch镜像
docker pull elasticsearch
时间较长,慢慢等待
拉取kibana镜像
docker pull kibana
拉取logstash镜像
docker pull logstash
拉取nginx镜像
docker pull nginx
这里为什么还需要部署nginx呢?因为Nginx在ELK部署中具有以下几个重要的作用:
(1)SSL/TLS加密和访问控制:通过使用Nginx作为反向代理,可以配置SSL/TLS证书以启用加密通信,确保数据在网络传输过程中的安全性。此外,Nginx还可以实施访问控制策略,例如基于IP地址的白名单/黑名单,提供对ELK堆栈的授权访问。
(2)负载均衡:当ELK集群规模扩大时,可能需要在多个Elasticsearch节点之间进行负载均衡,以提高性能和可扩展性。Nginx作为反向代理可以帮助实现负载均衡,将请求分发到不同的Elasticsearch节点,从而平衡负载并优化性能。
(3)静态资源缓存和压缩:Kibana作为ELK堆栈的前端可视化工具,可能包含大量的静态资源文件(例如JavaScript、CSS和图像等)。Nginx可以通过实施缓存策略和启用压缩,提高这些静态资源的加载速度,从而改善用户体验。
(4)改善网络安全性:将ELK堆栈直接暴露在公共网络中可能会带来一些潜在的安全风险。通过使用Nginx作为反向代理,可以将ELK堆栈隐藏在内部网络中,只暴露Nginx的端口给外部访问,从而提高网络安全性。
查看docker镜像
docker images
部署Elasticsearch
修改JVM堆大小
默认情况下,Elasticsearch的JVM使用的堆大小为2GB,可以修改ES的jvm默认参数
find /var/lib/docker/overlay2/ -name jvm.options
这个路径下的jvm文件
进去修改
vi /var/lib/docker/overlay2/53d11f269e179358229b5468f4580f3bc506cde5443f1c2087c3b5e4b1c70372/diff/etc/elasticsearch/jvm.options
修改红框处
-Xms2g 改为 -Xms1g
-Xmx2g 改为 -Xmx1g
调整vm.max_map_count大小
vim /etc/sysctl.conf
在尾行增加如下:
vm.max_map_count=262144
这是一个设置内核参数的语法,vm.max_map_count 是内核参数的名称。它用于控制单个进程能够拥有的虚拟内存区域(即映射区域)的最大数量。
Elasticsearch使用了大量的内存映射文件来存储数据索引和缓存。为了保证Elasticsearch正常运行,在某些操作系统中需要增加 vm.max_map_count 的值。
通过将该参数设置为较大的值(例如262144),可以确保操作系统能够提供足够的虚拟内存区域供Elasticsearch使用,从而避免潜在的性能问题或错误。
保存退出,查看配置是否生效
sysctl -p
启动elasticsearch容器
docker run --name elasticsearch -v "$PWD/esdata":/usr/share/elasticsearch/data -p 9200:9200 -d elasticsearch
docker logs elasticsearch //查看Docker容器日志的命令
curl http://localhost:9200
回显如下表示服务正常
部署logstash
创建logstash配置文件
mkdir -p /docker/config/logstash/
vim /docker/config/logstash/logstash.conf
在/docker/config/logstash/目录下创建配置文件logstash.conf,内容如下:
input {
beats {
port => 5044
type => beats
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
}
}
启动logstash容器
docker run --name logstash --link elasticsearch:elasticsearch -p 5044:5044 -d -v /docker/config/logstash:/config-dir logstash -f /config-dir/logstash.conf
docker logs logstash
部署nginx应用
docker run -e TZ="Asia/Shanghai" -d -p 80:80 -v "$PWD/logs":/var/log/nginx --name nginx nginx
直接本地访问IP
部署filebeat
Filebeat是Elasticsearch公司提供的一个轻量级日志收集器,用于从各种源(例如日志文件、系统日志等)抓取数据,并将其传输到Elasticsearch或Logstash等数据处理和分析工具。Filebeat的轻量级特性使其适用于各种规模的环境,并且与Elastic Stack(如Elasticsearch、Logstash和Kibana)的其他组件集成紧密,提供了一个强大的日志分析解决方案。
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.2-x86_64.rpm
rpm -ivh filebeat-7.4.2-x86_64.rpm
vim /etc/filebeat/filebeat.yml
修改完毕保存退出,再查看相关配置内容
grep -Ev '#|^$' /etc/filebeat/filebeat.yml
检查无误,重载并启动
systemctl restart filebeat
systemctl enable filebeat
部署kibana
docker run --name kibana --link elasticsearch:elasticsearch -p 5601:5601 -d kibana
docker ps -a
访问IP加端口
创建Index pattern
查看采集到的日志信息
kibana基础使用
进入Discover页面
1.选择查询的服务和日志文件
选择对应的应用
选择对应的应用下的日志文件
2.查询错误日志
Search框输入error -> Refresh
3.精确搜索完整短句“this is my words”(带空格)【ps:需要加引号】