ARTICLE DETAIL

资讯详情

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

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

内网容器部署FTP日志监控服务 内网容器部署FTP日志监控服务一、背景说明二、准备工作三、操作步骤1、部署FTP服务2、镜像和文件上传3、部署容器环境3.1 安装docker3.2 安装docker-compose可选择4、启动容器服务四、结果展示一、背景说明随着AI使用的盛行运维工作人员也可以使用它开发简单的应用服务协助完成一些重复化的工作以提高效率。笔者在公司工作耗时较长的一项任务是给每台应用服务器以服务为单位给应用日志配置定时压缩并删除源文件、定时上传压缩日志到归档服务器的脚本。生产环境有数百台虚拟机每台虚拟机至少部署1个应用服务如果长期把时间用在上面是极其枯燥的。工作成果只能人工手动记录到excel表格无法在工作汇报时直观展示实时数据。在和AI聊了很久后完成了FTP上传日志的实时监控工具部署。二、准备工作1、本文的重点是从0到1部署容器服务而不是编写代码或者FTP日志监控中的需求解析。2、本文用到的py和html文件打包成镜像在虚拟机运行容器服务。3、FTP服务端ftpuser作为ftp上传文件的用户家目录是/LogdataIP是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编写配置文件[rootftp-server ~]# cat /etc/vsftpd/vsftpd.confanonymous_enableNOlocal_enableYESwrite_enableYESlocal_umask022dirmessage_enableYESxferlog_enableYESconnect_from_port_20YESxferlog_file/var/log/xferlogxferlog_std_formatYESchroot_local_userYESchroot_list_enableNOlistenYESpam_service_namevsftpduserlist_enableNOallow_writeable_chrootYES配置服务端访问白名单[rootftp-server ~]# cat /etc/vsftpd/user_listftpuser启动服务并设置开机自动启动systemctl start vsftpd systemctlenablevsftpd systemctl status vsftpd以下状态表示服务启动正常如果服务启动失败可以检查shells文件是否存在/sbin/nologin如果没有则添加并重启服务。[rootftp-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/目录下。笔者的源码归档包直接解压也是这个目录文件。[rootftp-server opt]# tar xf ftp-log-monitor-dir-v1.0.tar.gz[rootftp-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[rootftp-server opt]# cd ftp-log-monitor/[rootftp-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/chmodx /usr/bin/docker*启动 Docker 守护进程dockerd验证版本[rootftp-server opt]# docker --versionDocker version24.0.7, build afdd53b为便于启停docker配置systemd服务[rootftp-server opt]# cat /etc/systemd/system/docker.service[Unit]DescriptionDocker Application Container EngineDocumentationhttps://docs.docker.comAfternetwork-online.target firewalld.serviceWantsnetwork-online.target[Service]TypenotifyExecStart/usr/bin/dockerdExecReload/bin/kill-sHUP$MAINPIDLimitNOFILEinfinityLimitNPROCinfinityLimitCOREinfinityTimeoutStartSec0DelegateyesKillModeprocessRestarton-failureStartLimitBurst3StartLimitInterval60s[Install]WantedBymulti-user.target由于我们在安装docker时已经启动服务此时再使用systemd启动时会报错因此需要先杀掉对应的服务进程。pkill-9dockerdpkill-9containerdpkill-9containerd-shim此时可以启动docker服务# 让 systemd 重新加载配置识别到新服务systemctl daemon-reload# 启动 Docker 服务systemctl startdocker# 设置开机自动启动systemctlenabledocker3.2 安装docker-compose可选择实际上在docker安装完成后我们就可以直接用docker命令针对导入系统的镜像启动容器服务了。但为了保存本地环境的启停参数笔者使用yaml文件启动容器为此需要额外部署docker-compose如果不想安装docker-compose直接使用docker命令启动容器请先把镜像导入系统再执行以下命令即可。dockerrun-d\--nameftp-log-monitor\--restartunless-stopped\--log-opt max-size10m\--log-opt max-file3\-p5021:5000\-eUSER_DB/app/data/users.db\-eMONITOR_DB/app/data/monitor.db\-eXFERLOG_PATH/var/log/xferlog\-eLOGDATA_ROOT/Logdata\-eTZAsia/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-Lhttps://github.com/docker/compose/releases/latest/download/docker-compose-$(uname-s)-$(uname-m)-odocker-compose移动为可执行文件并授权mv/opt/docker-compose /usr/local/bin/docker-composechmodx /usr/local/bin/docker-compose验证版本[rootftp-server opt]# docker-compose --versionDocker Compose version v5.5.14、启动容器服务首先导入镜像到系统其次进入yaml文件所在目录确保没有多余的yaml或者yml文件干扰直接用docker-compose启动容器。贴一下我的其他文件内容。[rootftp-server ftp-log-monitor]# cat docker-compose.yamlversion:3.8services: ftp-log-monitor: image: ftp-log-monitor:v1.0 container_name: ftp-log-monitor restart: unless-stopped ports: -5021:5000environment: -USER_DB/app/data/users.db -MONITOR_DB/app/data/monitor.db -XFERLOG_PATH/var/log/xferlog -LOGDATA_ROOT/Logdata -TZAsia/Shanghai volumes: - /opt/ftp-log-monitor/data:/app/data - /var/log/xferlog:/var/log/xferlog:ro - /Logdata:/Logdata:ro logging: driver:json-fileoptions: max-size:10mmax-file:3[rootftp-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][rootftp-server ftp-log-monitor]# cat requirements.txtFlask2.3.2 flask-cors4.0.0openpyxl3.1.2xlwt1.3.0检查容器正常启动。[rootftp-server ftp-log-monitor]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b331e18fe100 ftp-log-monitor:v1.0python -m app.main45seconds ago Up43seconds0.0.0.0:5021-5000/tcp, :::5021-5000/tcp ftp-log-monitor四、结果展示浏览器访问http://192.168.0.100:5021/login此处的账密是自己与AI沟通后确定的。到此结束。
返回列表