Prometheus+loki实现日志监控警报

2,099 阅读6分钟

安装

Loki、promtail、Grafana Prometheus

二进制包安装

Loki,promtail配置文件下载

wget raw.githubusercontent.com/grafana/lok…

wget raw.githubusercontent.com/grafana/lok…

二进制包下载:

wget github.com/grafana/lok…

wget github.com/grafana/lok…

wget mirrors.huaweicloud.com/grafana/7.1…

wget github.com/prometheus/…

 Loki配置文件

auth_enabled: false

server:

  http_listen_port: 3100

  grpc_listen_port: 39095 #grpc监听端口,默认为9095

  grpc_server_max_recv_msg_size: 15728640  #grpc最大接收消息值,默认4m

  grpc_server_max_send_msg_size: 15728640  #grpc最大发送消息值,默认4m

ingester:

  lifecycler:

    address: 192.168.66.178 #IP地址

    ring:

      kvstore:

        store: inmemory

      replication_factor: 1

    final_sleep: 0s

  chunk_idle_period: 5m

  chunk_retain_period: 30s

  max_transfer_retries: 0

  max_chunk_age: 20m  #一个timeseries块在内存中的最大持续时间。如果timeseries运行的时间超过此时间,则当前块将刷新到存储并创建一个新块

schema_config:

  configs:

    - from: 2018-04-15

      store: boltdb

      object_store: filesystem

      schema: v11

      index:

        prefix: index_

        period: 168h

storage_config:

  boltdb:

    directory: /opt/loki/loki_data/index

  filesystem:

    directory: /opt/loki/loki_data/chunks

limits_config:

  enforce_metric_name: false

  reject_old_samples: true

  reject_old_samples_max_age: 168h

  ingestion_rate_mb: 30  #修改每用户摄入速率限制,即每秒样本量,默认值为4M

  ingestion_burst_size_mb: 15  #修改每用户摄入速率限制,即每秒样本量,默认值为6M

chunk_store_config:

  max_look_back_period: 168h   #回看日志行的最大时间,只适用于即时日志

table_manager:

  retention_deletes_enabled: true #日志保留周期开关,默认为false

  retention_period: 168h  #日志保留周期

 promtail配置文件

server:

  http_listen_port: 9080

  grpc_listen_port: 0

  grpc_server_max_recv_msg_size: 15728640

  grpc_server_max_send_msg_size: 15728640

positions:

  filename: /opt/loki/promtail/positions.yaml

clients:

  - url: http://192.168.66.178:3100/loki/api/v1/push

scrape_configs:

- job_name: app_log

  static_configs:

  - targets:

      - localhost

    labels:

      job: varlogs_178

      __path__: /var/log/*log

      #__path__: /ceph_root/{dev,test}/apps_data/*/log/*log

创建安装目录,解压程序并移动到指定特定目录 

loki:

mkdir -p /opt/loki

mkdir -p /opt/loki/loki_data

mv loki-linux-amd64 loki-local-config.yaml /opt/loki

promtail:

mkdir -p /opt/promtail

mv promtail-linux-amd64 promtail-local-config.yaml /opt/promtail

创建Systemd服务启动loki

useradd  -s /sbin/nologin -M loki

chown -R loki:loki /opt/loki/

vim /etc/systemd/system/loki.service 

[Unit]
Description=loki
Documentation=https://grafana.com/oss/loki/
After=network.target
[Service]
User=loki
Group=loki
Type=simple
ExecStart=/opt/loki/loki-linux-amd64 --config.file=/opt/loki/loki-local-config.yaml 
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动

systemctl start loki

systemctl status loki

systemctl enable loki

创建Systemd服务启动loki

useradd  -s /sbin/nologin -M promtail

chown -R promtail:promtail /opt/promtail/

vim /etc/systemd/system/promtail.service

启动

systemctl start promtail

systemctl status promtail

systemctl enable promtai

 Prometheus配置

       Prometheus基于Golang编写,编译后的软件包,不依赖于任何的第三方依赖。用户只需要下载对应平台的二进制包,解压并且添加基本的配置即可正常启Prometheus Server。
Prometheus 配置说明:

global:

  scrape_interval:     15s # 设置抓取间隔,默认为1分钟

  evaluation_interval: 15s #估算规则的默认周期,每15秒计算一次规则。默认1分钟

  # scrape_timeout  #默认抓取超时,默认为10s


# Alertmanager相关配置

alerting:

  alertmanagers:

  - static_configs:

    - targets:

      # - alertmanager:9093



# 规则文件列表,使用'evaluation_interval' 参数去抓取

rule_files:

  # - "first_rules.yml"

  # - "second_rules.yml"



#  抓取配置列表

scrape_configs:

  - job_name: 'prometheus'

    static_configs:

    - targets: ['localhost:9090']

创建prometheus的用户及数据存储目录

为了安全,使用普通用户来启动prometheus服务。作为一个时序型的数据库产品,prometheus的数据默认会存放在应用所在目录下

useradd  -s /sbin/nologin -M prometheus

#创建数据目录

mkdir  /export/prometheus/data -p

#修改目录属主

chown -R prometheus:prometheus /opt/prometheus/

创建Systemd服务启动prometheus

prometheus的启动很简单,只需要直接启动解压目录的二进制文件prometheus即可,但是为了更加方便对prometheus进行管理,这里使用systemd来启停prometheus

vim /etc/systemd/system/prometheus.service

[Unit]

Description=Prometheus

Documentation=https://prometheus.io/

After=network.target

[Service]

Type=simple

User=prometheus

ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/opt/prometheus/data

Restart=on-failure

[Install]

WantedBy=multi-user.target

备注:在service文件里面,我们定义了启动的命令,可以定义数据存储路径,否则默认会在prometheus二进制的目录的data下

systemctl start prometheus

systemctl status prometheus

systemctl enable prometheu

 granfana配置

grafana:

useradd -s /sbin/nologin -M grafana

mkdir /opt/grafana/data

chown -R grafana:grafana /opt/grafana/

修改grafana配置文件:

vim /opt/grafana/conf/defaults.ini

修改内容如下:(一般保持默认即可)

data = /opt/grafana/data

logs = /opt/grafana/log

plugins = /opt/grafana/plugins

provisioning = /opt/grafana/conf/provisioning

新增 grafana-server.service 文件,使用systemd来管理grafana服务

vim /etc/systemd/system/grafana-server.service

[Unit]

Description=Grafana

After=network.target



[Service]

User=grafana

Group=grafana

Type=notify

ExecStart=/opt/grafana/bin/grafana-server -homepath /opt/grafana

Restart=on-failure



[Install]

WantedBy=multi-user.target

启停并设置开机启动

systemctl start  grafana-server

systemctl status  grafana-server

systemctl enable  grafana-server

打开grafana的web页面

grafana已经安装完毕。默认情况下,grafana-server会启动3000端口,使用浏览器打开grafana页面:http://IP:3000/login,输入默认的账号密码 admin/admin登录,第一次登陆需要修改密码。

 添加数据源

grafana虽然已经安装好了,但是这个时候还没有数据,没办法作图。下面我们把grafana和loki 或者和 prometheus关联起来,也就是在grafana中添加添加数据源。 

Grafana显示和过滤日志

在配置页面点击添加Data Sources,然后选择loki,输入loki 服务的参数然后点Save & Test即可。

查看过滤日志

左侧菜单栏选择 Explore详细查看方法 ,这位大佬写的很清晰:www.cnblogs.com/turingguo/p…

prometheus添加数据源

  在配置页面点击添加Data Sources,然后选择prometheus,输入prometheus服务的参数即可。

使用Node Exporter采集主机运行数据

    与传统的监控zabbix来对比的话,prometheus-server就像是mysql,负责存储数据。只不过这是时序数据库而不是关系型的数据库。数据的收集还需要其他的客户端,在prometheus中叫做exporter。针对不同的服务,有各种各样的exporter,就好比zabbix的zabbix-agent一样。这里为了能够采集到主机的运行指标如CPU, 内存,磁盘等信息。我们可以使用Node Exporter。Node Exporter同样采用Golang编写,并且不存在任何的第三方依赖,只需要下载,解压即可运行。可以从https://prometheus.io/download/获取最新的node exporter版本的二进制包

下载node exporter

wget github.com/prometheus/… -xf node_exporter-0.18.1.linux-amd64.tar.gz#新建一个目录专门安装各种exportermkdir -p /opt/prometheus/exportermv node_exporter-0.18.1.linux-amd64 /opt/prometheus/exporter/cd /opt/prometheus/exporter/mv node_exporter-0.18.1.linux-amd64 node_exporter

加入linux服务,启动node exporter

直接打开node_exporter的可执行文件即可启动 node export,默认会启动9100端口。建议使用systemctl来启动
vim /etc/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target
 
[Service]
Restart=on-failure
ExecStart=/opt/prometheus/exporter/node_exporter/node_exporter
 
[Install]
WantedBy=multi-user.target

加入开机启动

systemctl enable node_exporter

systemctl start node_exporte

 配置Prometheus,收集node exporter的数据

可以看到node exporter启动后也就是暴露了9100端口,并没有把数据传到prometheus,我们还需要在prometheus中配置,让prometheus去pull这个接口的数据。

编辑prometheus.yml文件,增加后面4行.


然后重启prometheus,打开prometheus页面查看是不是有对应的数据了。

scrape_configs:

  - job_name: 'prometheus'



    # metrics_path defaults to '/metrics'

    # scheme defaults to 'http'.

    static_configs:

    - targets: ['localhost:9090']



  #采集node exporter监控数据

  - job_name: 'node'

    static_configs:

    - targets: ['localhost:9100']

在prometheus的web界面看到这个节点是up的状态了,接下来我们在grafana中添加对应的模板。

导入grafana模板,数据展示

在导入界面,我们输入模板的编号,这里我使用的是9276号模板,如要使用其他的模板,请到grafana的官网去查找 grafana.com/dashboards

选择数据源,然后点击导入

详情看大佬这篇

https://www.cnblogs.com/shawhe/p/11833368.html