单体模式部署Loki服务

news/2024/11/15 12:12:18/文章来源:https://www.cnblogs.com/guangdelw/p/18308569

将Loki的所有微服务组件打包部署到单一进程中

适合小规模系统的日志存储场景(每天不超过100G)

在必要时,可部署共享外部对象存储的多实例进行水平扩容

  • 在配置文件loki.yaml的ring配置段中定义日志数据的跨实例分发

支持高可的部署方式

  • 多个实例需要配置共享的外部对象存储
  • 需要设定合理的复制因子

最简单的操作模式是整体部署模式。

可以通过设置命令行参数来启用整体模式。此模式将 Loki 的所有微服务组件作为单个二进制或 Docker 映像在单个进程中运行。

需要给loki加个参数-target=all

部署

本地快速部署Loki Stack

  • 依赖环境:docker和docker-compose
  • 示例组件
    • Loki Server
    • Grafana
    • Promtail
    • MinIO
    • Flog:专用于用生成http服务访问日志的示例

整体架构

主要的loki参数-target=all

networks:loki:volumes:loki:grafana:services:loki:image: grafana/loki:2.9.7command: "-config.file=/etc/loki/config.yaml -target=all" #添加参数-target=allports:- 3100:3100- 7946- 9095volumes:- ./loki-config.yaml:/etc/loki/config.yamldepends_on:- miniohealthcheck:......

完整配置文件

.
├── docker-compose.yaml
├── loki-config.yaml
└── promtail-local-config.yaml

docker-compose.yaml文件

networks:loki:services:# Since the Loki containers are running as user 10001 and the mounted data volume is owned by root,# Loki would not have permissions to create the directories.# Therefore the init container changes permissions of the mounted directory.init:image: &lokiImage grafana/loki:2.9.7user: rootentrypoint:- "chown"- "10001:10001"- "/loki"volumes:- ./loki:/lokinetworks:- lokiloki:image: *lokiImagecommand: "-config.file=/etc/loki/config.yaml -target=all"ports:- 3100:3100- 7946- 9095volumes:- ./loki-config.yaml:/etc/loki/config.yamldepends_on:- miniohealthcheck:test: [ "CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:3100/ready || exit 1" ]interval: 10stimeout: 5sretries: 5networks: &loki-dnsloki:aliases:- gatewaygrafana:#image: grafana/grafana:latestimage: grafana/grafana:10.2.6-ubuntuenvironment:- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource- GF_PATHS_PROVISIONING=/etc/grafana/provisioning# 开启免密登录#- GF_AUTH_ANONYMOUS_ENABLED=true#- GF_AUTH_ANONYMOUS_ORG_ROLE=Admin# 设置密码- GF_SECURITY_ADMIN_PASSWORD=111111# 不允许注册- GF_USERS_ALLOW_SIGN_UP=falseuser: '0'volumes:- ./grafana:/var/lib/grafana- ./provisioning:/etc/grafana/provisioningdepends_on:- lokientrypoint:- sh- -euc- |mkdir -p /etc/grafana/provisioning/datasourcescat <<EOF > /etc/grafana/provisioning/datasources/ds.yamlapiVersion: 1datasources:- name: Lokitype: lokiaccess: proxyurl: http://loki:3100jsonData:httpHeaderName1: "X-Scope-OrgID"secureJsonData:httpHeaderValue1: "tenant1"EOF/run.shports:- "3000:3000"healthcheck:# test: [ "CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:3000/api/health || exit 1" ]test: [ "CMD-SHELL", "curl --silent --fail http://localhost:3000/api/health || exit 1" ]interval: 10stimeout: 5sretries: 5networks:- loki# for testing purposes only, disable in production# 生成json类型的日志loggen-json:image: &flogImage mingrammer/flog:0.4.3command:- --loop- --format=json- --number=1 # number of log lines to generate per second- --delay=1000ms # delay between log lines- --output=/var/log/generated-logs.txt- --overwrite- --type=logvolumes:- ./loki/:/var/log/# 生成combined类型的日志loggen-apache-combined:image: *flogImagecommand: -f apache_combined -d 2000ms -lnetworks:- loki# 生成common类型的日志loggen-apache-common:image: *flogImagecommand: -f apache_common -d 1500ms -lnetworks:- lokipromtail:image: grafana/promtail:2.9.7volumes:- ./promtail-local-config.yaml:/etc/promtail/config.yaml:ro- /var/run/docker.sock:/var/run/docker.sock- ./loki/:/var/log/command: -config.file=/etc/promtail/config.yamlports:- 9080depends_on:- lokinetworks:- lokiminio:image: minio/minio:RELEASE.2024-04-18T19-09-19Zentrypoint:- sh- -euc- |mkdir -p /data/loki-data && \mkdir -p /data/loki-ruler && \minio server /data --console-address ":9001"environment:- MINIO_ROOT_USER=loki- MINIO_ROOT_PASSWORD=111111111- MINIO_PROMETHEUS_AUTH_TYPE=public- MINIO_UPDATE=offports:- "9000"- "9001:9001"volumes:- ./.data/minio:/datahealthcheck:test: [ "CMD", "curl", "-f", "http://localhost:9000/minio/health/live" ]interval: 15stimeout: 20sretries: 5networks:- loki

loki配置文件

loki-config.yaml

---
server:# 配置 Loki 的 HTTP 监听端口。这里设置为 3100http_listen_port: 3100
memberlist:# 配置 Loki 的成员列表。这里设置了一个成员,地址为 loki:7946join_members:- loki:7946# 用于配置 Loki 的数据存储模式。
# 设置一个配置,从 2021 年 8 月 1 日开始,使用 tsdb 存储引擎,s3 对象存储,v13 模式。
# 索引前缀设置为 index_,索引内存存储周期设置为 24 小时。
schema_config:configs:- from: 2021-08-01store: tsdbobject_store: s3schema: v13index:prefix: index_period: 24h
# 配置 Loki 的通用设置
common:# 设置路径前缀为 /loki  就比如如果要push数据上来,那路径就应该是/loki/api/v1/pushpath_prefix: /loki# 副本因子为 1replication_factor: 1# 存储设置使用 S3 存储,连接到 MinIO 服务器,端点设置为 minio:9000,启用不安全模式# 使用 loki-data 存储桶,访问密钥 ID 为 loki,访问密钥为 111111111,强制使用路径风格。storage:# 连接minios3:endpoint: minio:9000insecure: truebucketnames: loki-dataaccess_key_id: lokisecret_access_key: 111111111s3forcepathstyle: true# 配置 Loki 的环形存储。这里使用 memberlist 作为键值存储。ring:kvstore:store: memberlist
# 配置 Loki 的规则存储。这里使用 S3 存储,存储桶名称为 loki-ruler
ruler:storage:s3:bucketnames: loki-ruler

promtail的配置文件

promtail-local-config.yaml

---
server:# 设置监听端口http_listen_port: 9080# 设置 gRPC 监听端口,这里设置为 0,表示不启用 gRPC 监听grpc_listen_port: 0# 部分用于配置 Promtail 保存日志读取位置信息的文件。这里设置为 /tmp/positions.yaml
positions:filename: /tmp/positions.yaml# 配置 Promtail 将处理后的日志发送到 Loki 的接口。
# 这里设置了一个客户端,将日志发送到 http://loki:3100/loki/api/v1/push,并设置租户 ID 为 tenant1,后面grafana也会用到租户,他们在同一租户下才能获取到相同的内容
clients:- url: http://loki:3100/loki/api/v1/pushtenant_id: tenant1# 配置日志源加载各种日志,并处理各种日志
scrape_configs:# 配置一个名为 loggen_apache_common 的作业,使用 Docker 服务发现从 Docker 套接字获取日志源。- job_name: loggen_apache_commondocker_sd_configs:- host: unix:///var/run/docker.sock# 每 5 秒刷新一次服务发现配置refresh_interval: 5s# 过滤 Docker 容器名称,只收集名称为 loggen-apache-common 的容器的日志filters:- name: namevalues: ['loggen-apache-common']# 定义处理日志的管道阶段pipeline_stages:- regex:#expression: '^(?P<remote_host>\S+) (?P<user_identifier>\S+) (?P<user>\S+) \[(?P<ts>[^\]]+)\] \"(?P<request>[^\"]+)\" (?P<status>\d+) (?P<bytes_sent>\d+)$'#expression: '^(?P<_>\S+) (?P<_>\S+) (?P<_>\S+) \[(?P<_>[^\]]+)\] \"(?P<_>[^\"]+)\" (?P<status>\d+) (?P<_>\d+)$'# 用正则表达式取出匹配到的内容expression: '^.* (?P<status>\d+) (?P<_>\d+)$'# 然后将取出来的内容添加到日志流的标签中,标签名是status- labels:status:# 重新标记源标签。这里将 __meta_docker_container_name 标签重命名为 containerrelabel_configs:- source_labels: ['__meta_docker_container_name']regex: '/(.*)'target_label: 'container'- job_name: container_scrape docker_sd_configs:- host: unix:///var/run/docker.sockrefresh_interval: 5sfilters:- name: namevalues: ['loggen-apache-combined']relabel_configs:- source_labels: ['__meta_docker_container_name']regex: '/(.*)'target_label: 'container'# 收集 /var/log/generated-logs.txt 文件中的日志- job_name: generated-logsstatic_configs:- targets:- localhost# 设置作业标签和日志文件路径标签labels:job: generated-logs__path__: /var/log/generated-logs.txt# 定义处理日志的管道阶段pipeline_stages:# 用json格式解析,然后提取出method字段的值,给http_method变量  提取status字段的值,给http_status变量- json:expressions:http_method: 'method'http_status: "status"# 然后将这两个变量添加到标签中- labels:http_method:http_status:

启动

$ docker compose up -d
$ docker compose ps -a
NAME                            IMAGE                                      COMMAND                  SERVICE                  CREATED       STATUS                   PORTS
loki-grafana-1                  grafana/grafana:10.2.6-ubuntu              "sh -euc 'mkdir -p /…"   grafana                  8 hours ago   Up 8 hours (unhealthy)   0.0.0.0:3000->3000/tcp, ::
loki-init-1                     grafana/loki:2.9.7                         "chown 10001:10001 /…"   init                     8 hours ago   Exited (0) 8 hours ago   
loki-loggen-apache-combined-1   mingrammer/flog:0.4.3                      "flog -f apache_comb…"   loggen-apache-combined   8 hours ago   Up 8 hours               
loki-loggen-apache-common-1     mingrammer/flog:0.4.3                      "flog -f apache_comm…"   loggen-apache-common     8 hours ago   Up 8 hours               
loki-loggen-json-1              mingrammer/flog:0.4.3                      "flog --loop --forma…"   loggen-json              8 hours ago   Up 8 hours               
loki-loki-1                     grafana/loki:2.9.7                         "/usr/bin/loki -conf…"   loki                     8 hours ago   Up 8 hours (healthy)     0.0.0.0:3100->3100/tcp, ::2810->7946/tcp, 0.0.0.0:32809->9095/tcp, :::32809->9095/tcp
loki-minio-1                    minio/minio:RELEASE.2024-04-18T19-09-19Z   "sh -euc 'mkdir -p /…"   minio                    8 hours ago   Up 8 hours (healthy)     0.0.0.0:9001->9001/tcp, ::2808->9000/tcp
loki-promtail-1                 grafana/promtail:2.9.7                     "/usr/bin/promtail -…"   promtail                 8 hours ago   Up 8 hours               0.0.0.0:32811->9080/tcp, :

测试访问

curl 127.0.0.1:3100/ready
curl 127.0.0.1:3100/services
curl 127.0.0.1:3100/memberlist

访问grafana

http://192.168.140.71:3000/

因为在资源配置文件中配置了

所以可以看到已经有了loki的数据源

点击explore就可以进行查询操作

访问minio

http://192.168.140.71:9001/login

配置部分

设置了用户名密码以及创建了存储桶

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/745519.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DTO转VO工具

data工具,实现了对象拷贝 DTO -> VOdata工具,实现了对象拷贝 DTO -> VO 只需要实现一个类即可 data-utils data工具,实现了对象拷贝DTO —> VO 解决的问题 Mapstruct需要安插件!!!!很多云桌面等会很不方便org.springframework.beans.BeanUtils有一个 copyPropertie…

【Python】公众号聚合登录软件+源码

废话不多说了,直接上图,回复拿软件和源码【自己打包,配置环境比较复杂】 写这个软件就是因为其他平台的会员太贵了,还不如自己写个,不限制账号登录数~授权,打开和删除功能都是正常的, 面板功能,我打算做一个单独的页面【但是不知道做啥,就先放这里,希望各位老板提供想…

HuggingFace Transformers

HuggingFace Transformers https://www.hugging-face.org/hugging-face-transformers-2/Hugging Face Transformers has been built by, with, and for the community. Reaching 100k on GitHub is a testament to ML’s reach and the community’s will to innovate and cont…

函数式接口的使用

介绍 Consumer、Supplier、Predicate与Function 接口的使用Consumer 的使用(顾客) Consumer 翻译过来的意思就是消费者,很容易理解,它就是一个只负责消费的接口。相当于你是一个餐馆的顾客,你只负责吃你点的食物。在项目中一些不需要返回值,只负责消费的方法可以用过 Con…

Go语言之函数(func)进阶篇

目录一.init初始化函数1 初始化函数作用2 初始化函数定义案例2.1 初始化项目2.2 utils.go源代码2.3 main.go源代码二.匿名函数1 匿名函数概述2 匿名函数案例三.闭包函数1 闭包函数概述2 闭包函数案例之返回上级函数内部变量3 闭包函数案例之返回上级函数形参变量4 闭包函数返回…

linux命令入门指南

linux命令入门指南 (个人学习所用,雷同之处请忽略) 关于linux 服务器种类物理服务器 需要机房(零度、无尘、无静电)--防止机器短路,数据丢失。(建造自己的机房或者进行托管) 自己的服务器需要维护。 云服务器 由服务器厂商提供(阿里云、腾讯云)--省钱、有人维护 vmwa…

基于FPGA的MSK调制解调系统verilog开发,包含testbench,同步模块,高斯信道模拟模块,误码率统计模块

1.算法仿真效果 本程序系统是《m基于FPGA的MSK调制解调系统verilog开发,并带FPGA误码检测模块和matlab仿真程序》的的升级。升级前原文链接增加了完整的AWGN信道模型的FPGA实现,可以在testbench里面设置SNR,分析不同SNR对应的FPGA误码率情况。vivado2019.2仿真结果如下(完整…

【总结】逻辑运算在Z3中运用+CTF习题

国际赛IrisCTF在前几天举办,遇到了一道有意思的题目,特来总结。题目并不是很难,没有复杂的ollvm混淆也没有复杂的加密,但是却一步一步引导我们去学习和总结。国际赛IrisCTF在前几天举办,遇到了一道有意思的题目,特来总结。题目附件如下:📎babyrevjohnson.tar 解题过程…

在Python中使用SWCNN去除水印

在Python中使用SWCNN去除水印 说明首次发表日期:2024-07-17 SWCNN Github官方仓库: https://github.com/hellloxiaotian/SWCNN SWCNN 论文链接: https://arxiv.org/abs/2403.05807准备 运行环境 首先创建一个conda环境,安装SWCNN官方建议的库: conda create -n py39torch …

Xilinx NVMe AXI4主机控制器,AXI4接口高性能版本介绍

NVMe AXI4 Host Controller IP可以连接高速存储PCIe SSD,无需CPU,自动加速处理所有的NVMe协议命令,具备独立的数据写入和读取AXI4接口,不但适用高性能、顺序访问的应用,也适用于随机访问的应用,同时结合外部存储器(比如DDR),使得Host端的数据访问管理更加灵活。NVMe A…

请问如何将带有斜纹水印pdf的转成Excel呢?

大家好,我是Python进阶者。 一、前言 前几天在Python最强王者交流群【wen】问了一个Python自动化办公的问题,问题如下:请问如何将带有斜纹水印pdf的转成Excel呢?目前我把pdf转成图片,根据水印的颜色进行清除,但是在脱网环境下无法将图片转成Excel。 二、实现过程 后来【隔…

并发问题的三大根源是什么?

本文探讨了在多线程环境下,CPU缓存、线程切换以及编译优化如何影响数据的可见性、原子性和有序性,并提出了相应的解决方案。在单核CPU时代,所有线程共享同一缓存,确保了数据的一致性。然而,多核CPU下,各核心拥有独立缓存,可能导致线程间数据更新不可见。1.前言 从进程与…