首页 > 其他分享 >开源可观测性平台Signoz【日志采集篇】

开源可观测性平台Signoz【日志采集篇】

时间:2023-05-27 23:33:45浏览次数:41  
标签:otel Signoz 开源 signoz docker collector 日志 containers

image.png 转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。原创不易,请文明转载,谢谢。


开源可观测性平台Signoz系列【开篇】中,介绍了signoz的基础理论知识、安装部署及一些初始化配置。本文则记录signoz怎么采集日志,包括docker容器日志和主机日志

1. 收集容器日志

1.1 收集signoz本机docker容器日志

signoz在启动后,默认就会收集本机所有docker容器的日志,无需另行配置。 如果登录signoz后,发现日志模块为空: image.png 原因可能是本机docker安装目录不在默认的/var/lib/下。 在signoz的docker-compose.yml文件中(signoz-0.16.2/deploy/docker/clickhouse-setup/docker-compose.yml)文件中otel-collector模块,第201行默认的配置是:

- /var/lib/docker/containers:/var/lib/docker/containers:ro

image.png 如果当前服务器的docker安装目录并不在/var/lib/docker下,而是在别的路径如/home/docker,默认配置就无法收集到日志。同时可以看到默认的挂载路径/var/lib/docker/containers目录下是空文件,所以signoz无法采集到docker容器的日志。

同时clickhouse-setup_otel-collector_1容器的日志会有如下报错:

2023-03-20T09:14:21.855Z warn fileconsumer/file.go:61 no files match the configured include patterns {"kind": "receiver", "name": "filelog/dockercontainers", "pipeline": "logs", "component": "fileconsumer", "include": ["/var/lib/docker/containers//.log"], "exclude": []}

修改方法: 修改signoz-0.16.2/deploy/docker/clickhouse-setup/docker-compose.yml第201行为:

- /home/docker/containers:/var/lib/docker/containers:ro

然后重启otel-collector即可,如果是新的signoz,直接重启整个signoz也可。

1.2 收集其余主机docker容器日志

收集非signoz服务器的docker日志就需要安装客户端了,将服务器的docker目录挂载到客户端容器里,然后上报到signoz主机,原理类似filebeat采集日志。

1)创建指标收集配置文件otel-collector-config.yaml

[root@test otel]# cat otel-collector-config.yaml
receivers:
  filelog/containers:
    include: [  "/var/lib/docker/containers/*/*.log" ]
    #exclude: [ "/var/lib/docker/containers/*/<container_id>.log" ] #排除某个容器日志
    start_at: end
    include_file_path: true
    include_file_name: false
    operators:
    - type: json_parser
      id: parser-docker
      output: extract_metadata_from_filepath
      timestamp:
        parse_from: attributes.time
        layout: '%Y-%m-%dT%H:%M:%S.%LZ'
    - type: regex_parser
      id: extract_metadata_from_filepath
      regex: '^.*containers/(?P<container_id>[^_]+)/.*log$'
      parse_from: attributes["log.file.path"]
      output: parse_body
    - type: move
      id: parse_body
      from: attributes.log
      to: body
      output: add_source
    - type: add
      id: add_source
      field: resource["source"]
      value: "docker"
    - type: remove
      id: time
      field: attributes.time
processors:
  batch:
    send_batch_size: 10000
    send_batch_max_size: 11000
    timeout: 10s
exporters:
  otlp/log:
    endpoint: http://${signoz IP或域名}:4317  #如果部署signoz未修改端口映射,则默认是4317 
    tls:
      insecure: true
service:
  pipelines:
    logs:
      receivers: [filelog/containers]
      processors: [batch]
      exporters: [ otlp/log ]
[root@test otel]#

2)编写docker-compose.yml,用docker-compose方式启动

[root@test otel]# cat docker-compose.yaml 
version: "3"
services:
  otel-collector:
    image: signoz/signoz-otel-collector:0.66.5
    command: ["--config=/etc/otel-collector-config.yaml"]
    user: root # required for reading docker container logs
    container_name: signoz-host-otel-collector
    volumes:
      - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
      - /home/docker/containers:/var/lib/docker/containers:ro  #挂载本机正确的docker路径
    restart: on-failure
[root@test otel]#

3)启动signoz-otel-collector

docker-compose -f docker-compose.yml up -d

如果没装docker-compose,也可以直接docker方式启动otel-collector:

docker run -d --name signoz-host-otel-collector \
  --user root \
  -v /var/lib/docker/containers:/var/lib/docker/containers:ro \
  -v ./otel-collector-config.yaml:/etc/otel/config.yaml \
  signoz/signoz-otel-collector:0.66.5

4)启动signoz-host-otel-collector后,到signoz查看效果

主机日志如下: image.png signoz日志如下: image.png

2. 收集主机日志

以nginx为例,记录signoz收集非docker容器的服务器指定日志文件。

1)修改1.2中创建的otel-collector-config.yaml,加入filelog内容

[root@test otel]# cat otel-collector-config.yaml 
receivers:
  filelog/containers:
    include: [  "/var/lib/docker/containers/*/*.log" ]
    start_at: end
    include_file_path: true
    include_file_name: false
    operators:
    - type: json_parser
      id: parser-docker
      output: extract_metadata_from_filepath
      timestamp:
        parse_from: attributes.time
        layout: '%Y-%m-%dT%H:%M:%S.%LZ'
    - type: regex_parser
      id: extract_metadata_from_filepath
      regex: '^.*containers/(?P<container_id>[^_]+)/.*log$'
      parse_from: attributes["log.file.path"]
      output: parse_body
    - type: move
      id: parse_body
      from: attributes.log
      to: body
      output: add_source
    - type: add
      id: add_source
      field: resource["source"]
      value: "docker"
    - type: remove
      id: time
      field: attributes.time
 #####新增内容-1开始##########     
  filelog:
    include: [ "/var/log/nginx/*.log" ]  #本机nginx日志路径
    start_at: beginning
    operators:
      - type: json_parser
        timestamp:
          parse_from: attributes.time
          layout: '%Y-%m-%d,%H:%M:%S %z'
      - type: move
        from: attributes.message
        to: body
      - type: remove
        field: attributes.time
 #####新增内容-1结束##########  
processors:
  batch:
    send_batch_size: 10000
    send_batch_max_size: 11000
    timeout: 10s
exporters:
  otlp/log:
    endpoint: http://${IP of signoz}:4317  #如果部署signoz未修改端口映射,则默认是4317 
    tls:
      insecure: true
service:
  pipelines:
    logs:
      receivers: [filelog/containers,filelog]  #新增内容-2:添加filelog
      processors: [batch]
      exporters: [ otlp/log ]
[root@test otel]# 

2)重启 signoz-host-otel-collector

docker-compose -f docker-compose.yaml restart

3)到signoz查看日志: image.png 虽然功能齐全,signoz在日志搜索与查看方面不是很好用,相比ELK,要逊色一些。

3. 日志保留时长设置

日志采集保存后,通常会设置数据保留时间。在signoz中设置日志保留时长很简单,在界面就可以完成。

登录signoz进入Settings—General,即可设置和修改Metrics、Traces、Logs的数据保留时间: image.png

点击查看系列文章: 开源可观测性平台Signoz系列【开篇】

标签:otel,Signoz,开源,signoz,docker,collector,日志,containers
From: https://blog.51cto.com/u_10950710/6363279

相关文章

  • 基于Expression Lambda表达式树的通用复杂动态查询构建器——《原型篇一》[已开源]
    续接上编,本篇来讲讲俄罗斯套娃的设计与实现。首先简单地完善一下前面提到的例子,代码如下:测试实体类//测试实体类publicclassTable{publicintA;publicintB;}独立条件类//独立条件:publicclassField{publicLogicalLogical{get;set;} ......
  • ELK日志分析系统​
    拓扑图:推荐步骤:搭建ElasticSearch群集,通过浏览器查看和图形管理群集配置客户端安装apache和logstash服务配置采集apache日志配置kibana监听elasticsearch服务器日志实验步骤:一.搭建ElasticSearch群集,通过浏览器查看和图形管理群集1.配置第一台ElasticSearch群集1)修改hosts文件复制......
  • Loki 日志收集系统
    一.系统架构 二.组成部分 Loki的日志堆栈由3个组件组成:promtail:用于采集日志、并给每条日志流打标签,每个节点部署,k8s部署模式下使用daemonset管理。 loki:用于存储采集的日志,并根据标签查询日志流。单节点部署,一般和监控组件部署在同一节点。 Grafana:提供界面,实现......
  • jsp学习日志一,基本用法和隐式对象
    基本用法在第一个index.jsp文件中<formaction="monday-01.jsp"><inputtype="text"name="uname"><inputtype="submit"value="提交"></form>而monday.jsp文件中<%Stringa=request.getPa......
  • 《安富莱嵌入式周报》第313期:搬运机器人,微软出的C语言手册,开源生物信号采集板,开源SMD
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 更新一期视频教程:DSP视频教程第12期:TI开源分享IQmathDSP源码,适用于所有Cortex-M内核,本期教程做个手把手移植(2022-05-22)https://www.armbbs.cn/forum.php?mod=viewthread&......
  • C语言学习日志07
    现在就是有个疑惑,不知道C语言学习完之后还要不要学习一些衔接的东西还是直接学习python,因为我本身是一个带专哥们,专升本需求python占了60分,现在大一,感觉学习完C语言后就得马不停蹄的学习python了。--------------------------------------------------------------------------然后......
  • 牧云 • 主机管理助手|正式开放应用市场,梦幻联动雷池WAF等多款开源软件
     0x00 前言上个月,我司长亭开源了雷池WAF,不到三天就吸引了超过上千个师傅使用,几个交流群里,师傅们讨论的热火朝天,其中两个话题引起了我们牧云 • 主机管理助手 ( Collie ) 团队的关注:没有新主机安装雷池安装配置麻烦,希望有一键安装的脚本 别着急, Collie 会出手:......
  • 开源工作流WorflowCore学习之工作流简单审核
    在开源趋势下,很多开源的组件在国内,乃至全网都少有案例。为了做这个工作流翻了许多帖子和github的帖子在这里对github ZL.WorflowCoreDemo,和PizzaRestaurantWorkflow-main表示感谢,同时也感谢给博客园的帖子。本案例再利用ZL.WorflowCoreDemo中的项目直接进行新加的。关于如何......
  • scrapy:日志和post请求
    1.scrapy的日志信息设置配置文件settings.py设置:默认的级别为DEBUG,会显示上面所有的信息LOG_FILE:将屏幕显示的信息全部记录到文件中,屏幕不再显示,注意文件后缀一定是.logLOG_LEVEL:设置日志显示的等级,就是显示哪些,不显示哪些并没有正常打印,并且提示被百度反爬了,需......
  • linux服务器,nginx日志切割保存
    我们都知道,默认情况下,nginx的项目log是一直被累计写入的,随着时间越久,那么这个文件就会越大,这个时候如果我们要去做一些查找和排查就会比较困难,因为日志文件太大,操作起来比较费劲。因此我们为了规避这个问题,提出日志切割的方案。那日志切割的原理是怎么样的,我们来分析一下,我们先......