1.
准备台湾VPS(CN2)与操作系统
- 购买建议:选择带 CN2 路由、带宽 100Mbps+、至少 4vCPU/8GB 内存(日志+监控建议 8GB 起)。
- 操作系统:推荐 Ubuntu 22.04 LTS;登录后执行:sudo apt update && sudo apt upgrade -y。
- 基础配置:创建非root用户、设置 SSH 密钥、关闭密码登录,编辑 /etc/ssh/sshd_config,重启 ssh。
2.
主机优化与安全硬化
- 关闭不必要服务:sudo systemctl disable --now snapd etc(根据实际)。
- 内核参数:编辑 /etc/sysctl.conf,添加 vm.max_map_count=262144, fs.file-max=1000000,执行 sudo sysctl -p。
- 防火墙:安装 ufw,开放必要端口(22/80/443/5601/9200/9090/3000等),示例:sudo ufw allow 22/tcp && sudo ufw allow 5601/tcp && sudo ufw enable。
3.
安装 Docker 与 Docker Compose
- 安装:curl -fsSL https://get.docker.com | sh;安装 docker-compose:sudo apt install -y docker-compose。
- 权限:sudo usermod -aG docker $USER,重新登录。
- 验证:docker run --rm hello-world;docker-compose --version。
4.
选择日志与监控栈(建议组合)
- 日志:Loki + Promtail 或 ELK(Elasticsearch + Logstash + Kibana / OpenSearch + OpenSearch Dashboards)。
- 指标:Prometheus + node_exporter + cAdvisor + Grafana。
- 分布式追踪(可选):Jaeger 或 Tempo,考虑资源消耗。
5.
部署 Prometheus + Grafana(docker-compose 示例)
- 新建目录 /opt/observability,创建 docker-compose.yml,写入 Prometheus、Grafana、node-exporter、cAdvisor 服务。
- Prometheus 配置:在 /opt/observability/prometheus/prometheus.yml 添加 scrape_configs,包含 node_exporter 与 cadvisor。
- 启动:cd /opt/observability && docker-compose up -d;访问 Grafana 默认 3000,初始 admin/admin,需立即修改密码。
6.
部署日志系统:Loki + Promtail + Grafana
- 轻量方案:Loki 单实例 + Promtail 采集,Grafana 可直接作为展示端。
- Promtail 配置:指定 job_name、static_configs 指向容器日志路径(/var/lib/docker/containers/*/*.log)或 systemd。
- 启动:将 Loki 与 Promtail 加入 docker-compose,启动后在 Grafana 添加 Loki 数据源,构建日志面板与探索。
7.
ELK / OpenSearch 可选方案(单机调优)
- 如果选择 Elasticsearch/OpenSearch,必须调整 JVM 内存(-Xms/-Xmx 设置为总内存的一半,但不超过 32GB)。
- 持久化卷:为 elasticsearch 指定 host 卷并禁用 swap(sudo swapoff -a),确保 vm.max_map_count 已设置。
- 索引策略:配置 ILM(索引生命周期)—热存储 7 天、冷存储 30 天,避免磁盘被写满。
8.
应用日志采集与格式化
- 容器化应用:建议输出 JSON 格式的结构化日志(timestamp/level/app/message)。
- 非容器应用:使用 Fluent Bit/Fluentd 或 Filebeat 采集 /var/log/*.log,发送到 Loki/Elasticsearch。
- 示例 Promtail pipeline:pipeline_stages 中解析 json、添加 labels(app、env、host)。
9.
告警与通知流程(Prometheus Alertmanager)
- 在 Prometheus 中配置 alert.rules.yml(如 node_cpu、disk_full、prometheus_target_down)。
- 部署 Alertmanager,配置 routes 将告警发送到邮件、钉钉/企业微信/Slack 或 webhook。
- 在 Grafana 中配置告警面板(Grafana Alerting)并联动通知渠道。
10.
日志保留、压缩、备份策略
- 磁盘规划:为日志与索引单独挂载数据盘(/data/elasticsearch /data/loki)。
- 备份:ELK 使用 snapshot API 备份到 NFS 或对象存储;Loki 可定期将 WAL/索引导出。
- 清理:设置 ILM 或 curator 定期删除过期索引,避免磁盘被占满。
11.
安全与权限控制
- 为 Elasticsearch/OpenSearch 开启 X-Pack 安全或 Basic Auth;Loki/Grafana 启用 JWT/LDAP/OAuth。
- TLS:使用 nginx 反向代理并配置 Let's Encrypt(certbot),将 Dashboard(Kibana/Grafana)暴露在 HTTPS 下。
- 最小化端口暴露:只暴露必需端口,内部组件通过内网通信。
12.
扩展性与容器编排(可选 k3s / k8s)
- 小规模建议用 docker-compose,多节点或高可用建议上 k3s/kubernetes。
- StatefulSet + PVC 管理 Elasticsearch/Loki,使用 PV 与 StorageClass 绑定外置存储。
- 日志采集 DaemonSet(Promtail/Fluent Bit)在每个节点收集日志。
13.
监控平台日常运维清单
- 每日:检查 Prometheus targets、Grafana dashboards 是否异常;磁盘使用率。
- 每周:验证备份可用性;更新镜像与安全补丁。
- 每月:回顾索引策略、调整 ILM 和告警阈值。
14.
成本与性能优化建议
- 索引与日志量控制:尽量采集结构化日志并设置采样与过滤,避免全部日志入库。
- 使用日志分级(debug/info/error)和采样策略,仅错误全量保留。
- 对于带宽较贵的场景,考虑本地收集后批量压缩传输到集中存储。
15.
常见问题快速排查
- 无数据:检查 Promtail/Filebeat 是否能读取日志路径,容器权限是否允许。
- Kibana/Grafana 无法访问:查看反向代理与防火墙设置,检查服务容器日志。
- 磁盘高占用:查找大索引并根据 ILM 删除或归档。
16.
问:在台湾 CN2 VPS 上单机能否运行 Elasticsearch + Prometheus + Grafana + Loki?
- 答:可以,但资源需求高。建议至少 4vCPU/16GB 内存,且为 Elasticsearch 分配合理 JVM(总内存一半)。若资源不足,优先选择轻量组合(Prometheus+Grafana+Loki)。
17.
问:如何保证日志不丢失且快速恢复?
- 答:关键是持久化与备份:为数据目录使用独立盘并定期 snapshot(Elasticsearch snapshot 或对象存储备份),搭配异地备份策略;同时调整缓冲与重试策略(Promtail/Fluent Bit 设置 retry)。
18.
问:如何在成本有限的前提下保证可观测性?
- 答:采取分级采集与采样:只将关键服务和告警级别日志全量入库,其他调试日志按采样或按需上报;优先用 Loki(低资源)与 Prometheus,然后按需扩展到 OpenSearch/Elasticsearch。
来源:如何用台湾vps cn2 云主机 构建可观测性平台与日志管理体系