参考Grafana 安装配置教程
1 Grafana
Grafana是一个通用的可视化工具。对于Grafana而言,Prometheus这类为其提供数据的对象均称为数据源(Data Source)。目前,Grafana官方提供了对:Graphite, InfluxDB, OpenTSDB, tdengine,Prometheus, Elasticsearch, CloudWatch的支持。对于Grafana管理员而言,只需要将这些对象以数据源的形式添加到Grafana中,Grafana便可以轻松的实现对这些数据的可视化工作。
1.1 下载安装
官方下载地址
企业版是默认和推荐的版本。它包含了OSS版的所有功能,可以免费使用,并且可以升级到完整的企业功能集,包括对企业插件的支持。
(1)离线下载Linux安装包
下载https://dl.grafana.com/enterprise/release/grafana-enterprise_11.1.1_amd64.deb。
(2)执行安装
sudo apt-get install -y musl
sudo dpkg -i grafana-enterprise_11.1.1_amd64.deb
注意grafana的安装包目录(linux下默认目录是/usr/share/grafana)。
1.2 启动grafana
执行命令
#查看服务状态
systemctl status grafana-server.service
#设置服务开机自启动
systemctl enable grafana-server.service
#启动服务
systemctl start grafana-server.service
#关闭服务
systemctl stop grafana-server.service
(4)虚拟机配置端口转发
VirtualBox中,管理->工具->网络管理器->NAT网络->端口转发:
然后可以访问页面:http://localhost:23000/。
1.3 基本配置
1.3.1 登录设置
访问页面http://localhost:23000/。
初次访问页面,可以直接修改密码。
默认的登录用户名/密码:admin/admin。
修改的登录用户名/密码:admin/自定义。
1.3.2 中文设置
在默认情况下,Grafana使用英文作为其用户界面语言。对于非英语用户来说,这可能会造成一些不便,Grafana提供了设置中文的选项。
在 grafana默认配置 grafana安装目录/conf/defaults.ini 中,将default_language = en-US改为 zh-Hans即可,存在部分翻译不完全
注:linux安装默认目录:/usr/share/grafana/conf/defaults.ini
#default_language = en-US
default_language = zh-Hans
重启服务systemctl restart grafana-server.service
2 LPG(Loki+Promtail+Grafana)
参考轻量级日志系统Loki安装部署(最新版教程)
参考Grafana+Loki+Promtail 搭建日志收集系统
Grafana Loki是一个日志聚合工具,它是功能齐全的日志堆栈的核心。
Loki是受Prometheus启发由Grafana Labs团队开源的水平可扩展,高度可用的多租户日志聚合系统。开发语言: Google Go。它的设计具有很高的成本效益,并且易于操作。使用标签来作为索引,而不是对全文进行检索,也就是说,你通过这些标签既可以查询日志的内容也可以查询到监控的数据签,极大地降低了日志索引的存储。
2.1 Loki架构
Loki架构十分简单,由以下三个部分组成:
(1)Loki是主服务器,负责存储日志和处理查询 。
(2)promtail是代理,负责收集日志并将其发送给loki 。
(3)Grafana用于UI展示。
只要在应用程序服务器上安装promtail来收集日志然后发送给Loki存储,就可以在Grafana UI界面通过添加Loki为数据源进行日志查询。
Grafana可以和loki部署在同一台服务器。
而promtail需安装在每台有日志输出文件的应用服务器。
(1)Promtail收集并将日志发送给Loki的Distributor组件。
(2)Distributor会对接收到的日志流进行正确性校验,并将验证后的日志分批并行发送到Ingester。
(3)Ingester接受日志流并构建数据块,压缩后存放到所连接的存储后端。
(4)Querier收到HTTP查询请求,并将请求发送至Ingester用以获取内存数据,Ingester收到请求后返回符合条件的数据。
2.2 下载安装
参考Loki的GitHub下载地址
参考loki-local-config.yaml通用配置文件
参考promtail-local-config.yaml通用配置文件
2.2.1 loki-local-config.yaml
auth_enabled: false # 是否启用鉴权
server:
http_listen_port: 3100 #http访问端口
grpc_listen_port: 9096 #rpc访问端口
common:
path_prefix: /tmp/loki #loki
storage:
filesystem:
chunks_directory: /tmp/loki/chunks #记录块存储目录,默认chunks块上的日志数量或到期后,将chunks数据打标签后存储
rules_directory: /tmp/loki/rules #规则配置目录
replication_factor: 1
ring:
instance_addr: 127.0.0.1 #网络地址
kvstore:
store: inmemory
query_range: #查询规则
results_cache: #结果缓存
cache:
# embedded_cache: #默认开启后会有提示,未配置缓存项,暂不开启
# enabled: true
# distributed: true
# max_size_mb: 100
schema_config: #配置索引信息
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_ #索引前缀
period: 24h #索引时长
ruler:
alertmanager_url: http://localhost:9093 #告警通知url
2.2.2 promtail-local-config.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml #用于记录每次读取日志文件的索引行数,如:promtail重启后从该配置中恢复日志文件的读取位置
clients:
- url: http://localhost:3100/loki/api/v1/push #推送日志流到Loki中的api
scrape_configs: #发现日志文件的位置并从中提取标签
- job_name: system #任务名称
static_configs: # 目录配置
- targets: # 标签
- localhost
labels:
job: varlogs #子任务名称,通常以项目命令
__path__: /var/log/*log #要读取的日志文件的位置,允许使用通配符/*log或/**/*.log
2.3 启动loki和promtail
sudo unzip logcli-linux-amd64.zip
sudo unzip promtail-linux-amd64.zip
# 切换到root用户执行。
nohup /opt/loki/loki-linux-amd64 -config.file=/opt/loki/loki-local-config.yaml >loki.out 2>&1 &
nohup /opt/loki/promtail-linux-amd64 -config.file=/opt/loki/promtail-local-config.yaml >promtail.out 2>&1 &
http://本机IP:23100/metrics
3 使用systemctl管理loki和promtail
参考参考loki入门
3.1 loki.service
cat /etc/systemd/system/loki.service
[Unit]
Description=Loki Log Aggregator Service
After=network.target
[Service]
ExecStart=/opt/loki/loki-linux-amd64 -config.file=/opt/loki/loki-local-config.yaml
Restart=always
RestartSec=5s
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
Restart=always: 只要不是通过systemctl stop来停止服务,任何情况下都必须要重启服务,默认值为no。
RestartSec=5: 重启间隔,比如某次异常后,等待5(s)再进行启动,默认值0.1(s)。
3.2 promtail.service
cat /etc/systemd/system/promtail.service
[Unit]
Description=Promtail Log Shipper Service
After=network.target
[Service]
ExecStart=/opt/loki/promtail-linux-amd64 -config.file=/opt/loki/promtail-local-config.yaml
Restart=always
RestartSec=5s
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
3.3 服务管理
systemctl start loki
systemctl status loki
systemctl stop loki
systemctl start promtail
systemctl status promtail
systemctl stop promtail
systemctl enable loki # 配置开机自启动
systemctl enable promtail # 配置开机自启动
4 LPG与ELK比较
ELK虽然功能丰富,但规模复杂,资源占用高,操作苦难,很多功能往往用不上,有点杀鸡用牛刀的感觉。loki 不对日志进行全文索引。通过存储压缩非结构化日志和索引元数据,Loki 操作起来会更简单,更省成本。通过使用与 Prometheus相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高。安装部署简单快速,且受 Grafana 原生支持。
一、架构和组件
(1)Loki:Loki是一个开源的水平可扩展日志聚合系统,由Promtail、Loki和 Grafana组成。
(2)EFK:EFK是一个集成的解决方案,由Elasticsearch、Fluentd和Kibana组成。
二、存储和查询
(1)Loki:Loki使用了基于日志流的存储方式,将日志数据存储为可压缩的块文件,并达到高度压缩效率。
(2)EFK:EFK使用Elasticsearch作为中心化的日志存储和索引引擎。
三、可扩展性和资源消耗
(1)Loki:Loki的水平可扩展性非常好,可以处理大规模的日志数据。
(2)EFK:Elasticsearch是一个高度可扩展的分布式存储系统,但它对硬件资源的要求较高,特别是在存储大规模日志数据时。
四、配置和部署复杂性
(1)Loki:Loki的配置和部署较为简单。通过使用Promtail收集日志,并使用 Grafana进行查询和可视化,可以相对快速地启动和使用。
(2)EFK:EFK的配置和部署相对复杂一些。需要配置Fluentd的输入、过滤和输出插件,以及Elasticsearch和Kibana的集群设置。
5 使用Grafana查询日志
5.1 配置数据源Loki
(1)连接->数据源->添加新数据源->填写如下相关信息->点击保存和测试连接。
注意URL要使用本机IP。
(2)点击探索->选择loki数据源
(2-1)模式Code->输入查询条件
(2-2)模式Builder
选择不同的标签过滤filenam,job,stream等标签:
(3)结果显示
5.2 采集多个日志
在过滤条件中可以看到job的标签。