拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

内网容器部署FTP日志监控服务

内网容器部署FTP日志监控服务

内网容器部署FTP日志监控服务

  • 一、背景说明
  • 二、准备工作
  • 三、操作步骤
    • 1、部署FTP服务
    • 2、镜像和文件上传
    • 3、部署容器环境
      • 3.1 安装docker
      • 3.2 安装docker-compose(可选择)
    • 4、启动容器服务
  • 四、结果展示

一、背景说明

随着AI使用的盛行,运维工作人员也可以使用它开发简单的应用服务,协助完成一些重复化的工作以提高效率。

笔者在公司工作耗时较长的一项任务是:给每台应用服务器,以服务为单位,给应用日志配置定时压缩并删除源文件、定时上传压缩日志到归档服务器的脚本。

生产环境有数百台虚拟机,每台虚拟机至少部署1个应用服务,如果长期把时间用在上面,是极其枯燥的。工作成果只能人工手动记录到excel表格,无法在工作汇报时直观展示实时数据。在和AI聊了很久后,完成了FTP上传日志的实时监控工具部署。

二、准备工作

1、本文的重点是从0到1部署容器服务,而不是编写代码或者FTP日志监控中的需求解析。
2、本文用到的py和html文件打包成镜像,在虚拟机运行容器服务。
3、FTP服务端,ftpuser作为ftp上传文件的用户,家目录是/Logdata,IP是192.168.0.100,主机名是ftp-server,操作系统版本是Red Hat Enterprise Linux release 8.10 (Ootpa)
4、FTP客户端,IP是192.168.0.101,主机名是ftp-client,操作系统版本是Red Hat Enterprise Linux release 8.10 (Ootpa)

三、操作步骤

1、部署FTP服务

创建FTP服务的用户并指定家目录

useradd-d/Logdata-s/sbin/nologin ftpusermkdir/Logdatachownftpuser:ftpuser /Logdata

配置好yum源去安装vsftpd服务,请根据实际环境,无论是虚拟机挂载ISO镜像配置本地仓库(file:///) 还是其他某个虚拟机单独作为yum镜像仓库(http://)都可以。

yuminstallvsftpd-y

编写配置文件

[root@ftp-server ~]# cat /etc/vsftpd/vsftpd.confanonymous_enable=NOlocal_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_file=/var/log/xferlogxferlog_std_format=YESchroot_local_user=YESchroot_list_enable=NOlisten=YESpam_service_name=vsftpduserlist_enable=NOallow_writeable_chroot=YES

配置服务端访问白名单

[root@ftp-server ~]# cat /etc/vsftpd/user_listftpuser

启动服务并设置开机自动启动

systemctl start vsftpd systemctlenablevsftpd systemctl status vsftpd

以下状态表示服务启动正常

如果服务启动失败,可以检查shells文件,是否存在/sbin/nologin如果没有,则添加,并重启服务。

[root@ftp-server ~]# cat /etc/shells/bin/sh /bin/bash /usr/bin/sh /usr/bin/bash /usr/bin/tmux /bin/tmux /sbin/nologin

最后记得修改ftpuser用户的密码,如果是测试环境,可以简单设置为123456如果是生产环境,请根据需求配置。

2、镜像和文件上传

新建日志监控服务目录,并将所有安装包和镜像上传于/opt/目录下。

cd/opt/

文件如下

ftp-log-monitor-v1.0.tar.gz是镜像
ftp-log-monitor-dir-v1.0.tar.gz是源码归档包,包含 Dockerfile、应用代码(app/)、依赖清单(requirements.txt)等所有构建所需的文件。
剩余3个是部署docker环境需要的安装包和配置文件

需要注意的是,ftp-log-monitor-dir-v1.0.tar.gz是笔者自己在构建镜像时准备的文件,在实际从0到1的容器服务部署时,这个文件可以忽略,我们已经拥有了镜像。

为了和其他容器服务区分开,我们把相关文件迁移到/opt/ftp-log-monitor/目录下。笔者的源码归档包直接解压,也是这个目录文件。

[root@ftp-server opt]# tar xf ftp-log-monitor-dir-v1.0.tar.gz[root@ftp-server opt]# ll -htotal 151M -rw-r--r--1root root 67M Oct262023docker-24.0.7.tgz -rw-r--r--1root root 31M Sep2410:37docker-compose-rw-r--r--1root root587Sep2410:05 docker-compose.yaml drwxr-xr-x4root root97Sep2317:33 ftp-log-monitor -rw-r--r--1root root 136K Sep2317:41 ftp-log-monitor-dir-v1.0.tar.gz -rw-r--r--1root root 53M Sep2317:41 ftp-log-monitor-v1.0.tar.gz[root@ftp-server opt]# cd ftp-log-monitor/[root@ftp-server ftp-log-monitor]# tree.├── app │ ├── database.py │ ├── exporter.py │ ├── exporter.py.bad │ ├── __init__.py │ ├── log_parser.py │ ├── main.py │ ├── new_detection.py │ ├── __pycache__ │ │ ├── database.cpython-311.pyc │ │ ├── exporter.cpython-311.pyc │ │ ├── __init__.cpython-311.pyc │ │ ├── log_parser.cpython-311.pyc │ │ ├── main.cpython-311.pyc │ │ ├── new_detection.cpython-311.pyc │ │ ├── script_generator.cpython-311.pyc │ │ ├── script_task_manager.cpython-311.pyc │ │ ├── statistics.cpython-311.pyc │ │ ├── storage.cpython-311.pyc │ │ └── users.cpython-311.pyc │ ├── script_generator.py │ ├── script_task_manager.py │ ├── statistics.py │ ├── storage.py │ ├── templates │ │ ├── cron_config.html │ │ ├── dashboard.html │ │ ├── index.html │ │ ├── login.html │ │ ├── script_generator.html │ │ ├── script_tasks_history.html │ │ ├── script_tasks.html │ │ ├── script_tasks_import.html │ │ ├── storage.html │ │ └── users.html │ └── users.py ├── data │ ├── monitor.db │ └── users.db ├── docker-compose.yml ├── Dockerfile └── requirements.txt

理论上,我们在虚拟机上有了镜像和启动命令参数的yaml文件,就可以运行容器了。

3、部署容器环境

由于我们生产环境的日志归档服务器是一台虚拟机,并且也只部署1个FTP日志监控的容器服务,不需要K8S管理调度,只需要简单的docker就可以了。

3.1 安装docker

笔者的docker安装包是个人虚拟机离线下载的,直接执行命令即可。

wgethttps://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz

解压安装

tarxzvf docker-24.0.7.tgzcpdocker/* /usr/bin/chmod+x /usr/bin/docker*

启动 Docker 守护进程

dockerd&

验证版本

[root@ftp-server opt]# docker --versionDocker version24.0.7, build afdd53b

为便于启停docker,配置systemd服务

[root@ftp-server opt]# cat /etc/systemd/system/docker.service[Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comAfter=network-online.target firewalld.serviceWants=network-online.target[Service]Type=notifyExecStart=/usr/bin/dockerdExecReload=/bin/kill-sHUP$MAINPIDLimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinityTimeoutStartSec=0Delegate=yesKillMode=processRestart=on-failureStartLimitBurst=3StartLimitInterval=60s[Install]WantedBy=multi-user.target

由于我们在安装docker时已经启动服务,此时再使用systemd启动时会报错,因此需要先杀掉对应的服务进程。

pkill-9dockerdpkill-9containerdpkill-9containerd-shim

此时可以启动docker服务

# 让 systemd 重新加载配置,识别到新服务systemctl daemon-reload# 启动 Docker 服务systemctl startdocker# 设置开机自动启动systemctlenabledocker

3.2 安装docker-compose(可选择)

实际上在docker安装完成后,我们就可以直接用docker命令,针对导入系统的镜像,启动容器服务了。但为了保存本地环境的启停参数,笔者使用yaml文件启动容器,为此需要额外部署docker-compose

如果不想安装docker-compose,直接使用docker命令启动容器,请先把镜像导入系统,再执行以下命令即可。

dockerrun-d\--nameftp-log-monitor\--restartunless-stopped\--log-opt max-size=10m\--log-opt max-file=3\-p5021:5000\-eUSER_DB=/app/data/users.db\-eMONITOR_DB=/app/data/monitor.db\-eXFERLOG_PATH=/var/log/xferlog\-eLOGDATA_ROOT=/Logdata\-eTZ=Asia/Shanghai\-v/opt/ftp-log-monitor/data:/app/data\-v/var/log/xferlog:/var/log/xferlog:ro\-v/Logdata:/Logdata:ro\ftp-log-monitor:v1.0

同样的,先下载docker-compose的安装包

curl-L"https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname-s)-$(uname-m)"-odocker-compose

移动为可执行文件并授权

mv/opt/docker-compose /usr/local/bin/docker-composechmod+x /usr/local/bin/docker-compose

验证版本

[root@ftp-server opt]# docker-compose --versionDocker Compose version v5.5.1

4、启动容器服务

首先导入镜像到系统

其次进入yaml文件所在目录,确保没有多余的yaml或者yml文件干扰,直接用docker-compose启动容器。

贴一下我的其他文件内容。

[root@ftp-server ftp-log-monitor]# cat docker-compose.yamlversion:'3.8'services: ftp-log-monitor: image: ftp-log-monitor:v1.0 container_name: ftp-log-monitor restart: unless-stopped ports: -"5021:5000"environment: -USER_DB=/app/data/users.db -MONITOR_DB=/app/data/monitor.db -XFERLOG_PATH=/var/log/xferlog -LOGDATA_ROOT=/Logdata -TZ=Asia/Shanghai volumes: - /opt/ftp-log-monitor/data:/app/data - /var/log/xferlog:/var/log/xferlog:ro - /Logdata:/Logdata:ro logging: driver:"json-file"options: max-size:"10m"max-file:"3"[root@ftp-server ftp-log-monitor]# cat DockerfileFROM python:3.11-slim WORKDIR /app COPY requirements.txt.RUN pipinstall--no-cache-dir-rrequirements.txt-ihttps://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com COPY app/ ./app/# 创建挂载点目录# /var/log - 挂载 xferlog 日志文件# /Logdata - 挂载实际日志存储目录# /app/data - 存放 users.db 和 monitor.db(持久化)RUNmkdir-p/var/log /Logdata /app/data&&\chmod755/var/log /Logdata /app/data EXPOSE5000CMD["python","-m","app.main"][root@ftp-server ftp-log-monitor]# cat requirements.txtFlask==2.3.2 flask-cors==4.0.0openpyxl==3.1.2xlwt==1.3.0

检查容器正常启动。

[root@ftp-server ftp-log-monitor]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b331e18fe100 ftp-log-monitor:v1.0"python -m app.main"45seconds ago Up43seconds0.0.0.0:5021->5000/tcp, :::5021->5000/tcp ftp-log-monitor

四、结果展示

浏览器访问http://192.168.0.100:5021/login
此处的账密是自己与AI沟通后确定的。

到此结束。

返回列表