docker安装loki
docker pull grafana/loki
docker run -d --name loki -p 3100:3100 -v yourLog:/usr/share/loki/distributed/storage grafana/loki
java 集成推送到loki
如果是java8添加pom
<dependency>
<groupId>com.github.loki4j</groupId>
<artifactId>loki-logback-appender-jdk8</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.14</version>
</dependency>
logback里添加
<appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender">
<batchMaxItems>100</batchMaxItems>
<batchTimeoutMs>10000</batchTimeoutMs>
<verbose>true</verbose>
<http class="com.github.loki4j.logback.ApacheHttpSender">
<url>http://ip:3100/loki/api/v1/push</url>
</http>
<format>
<label>
<pattern>app=my-app,host=${HOSTNAME},level=%level</pattern>
</label>
<message>
<pattern>l=%level h=${HOSTNAME} c=%logger{20} t=%thread | %msg %ex %n</pattern>
</message>
<sortByTime>true</sortByTime>
</format>
</appender>
<root level="INFO">
<appender-ref ref="LOKI"/>
</root>
如果是java11及以上
<dependency>
<groupId>com.github.loki4j</groupId>
<artifactId>loki-logback-appender</artifactId>
<version>1.5.1</version>
</dependency>
<appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender">
<http>
<url>http://localhost:3100/loki/api/v1/push</url>
</http>
<format>
<label>
<pattern>app=my-app,host=${HOSTNAME}</pattern>
</label>
<message>
<pattern>%-5level [%.5(${HOSTNAME})] %.10thread %logger{20} | %msg %ex</pattern>
</message>
</format>
</appender>
<root level="DEBUG">
<appender-ref ref="LOKI" />
</root>
上面是java内集成推送到loki,也可以使用promtail采集日志文件,只不过这样不太方便分布式
安装promatail
docker安装promtail
docker pull grafana/promtail
docker run -d --name promtail -p 9080:9080 -v yourLog:/var/log --link loki grafana/promtail
然后随便调几个接口再grafana里查看
docker 安装grafana
docker pull grafana/grafana
docker run -d --name=grafana -p 3000:3000 grafana/grafana
打开网址 ip:3000
数据源 选loki url为ip:3100 点save
然后点探索 选择输入源 点运行查询就能看到
然后是java集成prometheus
docker安装prometheus
docker pull prom/prometheus
mkdir -p ~/prometheus/data # 创建本地目录用于存放数据
mkdir -p ~/prometheus/config # 创建目录存放配置文件
# 如果您还没有配置文件,可以从Prometheus官网下载一个基本配置作为起点
# wget https://raw.githubusercontent.com/prometheus/prometheus/main/config/prometheus.yml -O ~/prometheus/config/prometheus.yml
docker run -d --name prometheus \
-p 9090:9090 \ # 映射端口:容器的9090端口映射到主机的9090端口
-v ~/prometheus/data:/prometheus \ # 映射数据卷
-v ~/prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml \ # 映射配置文件
prom/prometheus:v2.39.0 \ # 使用刚下载的镜像
--config.file=/etc/prometheus/prometheus.yml # 指定配置文件路径
java集成暴露prometheus指标
pom添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
yml文件添加配置
spring.application.name=my-app
management.metrics.tags.application=${spring.application.name}
management.endpoints.web.exposure.include=*
# 暴露prometheus端点
management.metrics.export.prometheus.enabled=true
application类里添加bean
@Bean
MeterRegistryCustomizer<PrometheusMeterRegistry> metrics() {
return registry -> registry.config().commonTags("application", "my-app");
}
然后就可以访问java应用的接口指标了
javaip:java端口/actuator/prometheus
接着配置prometheus采集java指标
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'myapp'
# 采集地址
metrics_path: '/actuator/prometheus'
# 目标服务器
static_configs:
- targets: ['javaip:java端口']
然后再grafana里面添加prometheus的数据源就可以看到
http://prometheusip:9090
然后点仪表盘 导入 17175 就可以查看模板了