ELK开源实时日志分析平台。ELK是Elasticsearch,Logstash,Kibana 的缩写。

Elasticsearch:是个开源分布式搜索引擎,简称ES
Logstash:是一个完全开源的工具,可以对日志进行收集,过滤,存储到ES
Kibana: 也是一个开源和免费的工具,这里主要用作ES的可视化界面工具,用于查看日志。

环境:centos7.9

一、搭建ES

先要调高jvm线程数限制,修改sysctl.conf

vim /etc/sysctl.conf

修改max_map_count调大,如果没有这个设置,则新增一行

vm.max_map_count=262144

改完保存后, 执行下面命令让sysctl.conf文件生效

sysctl –p

拉取es镜像

#拉取镜像,指定版本号
docker pull elasticsearch:7.13.2

新建elasticsearch.yml配置文件并上传到主机目录用于配置文件挂载,方便后面修改,这里上传到/home/es目录。

http.host: 0.0.0.0
#跨域
http.cors.enabled: true
http.cors.allow-origin: "*"

启动es

docker run -d -p 9200:9200 -p 9300:9300 --name es -e ES_JAVA_OPTS="-Xms128m -Xmx256m" -v /home/es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.13.2
#9200是对外端口,9300是es内部通信端口
#-e ES_JAVA_OPTS="-Xms128m -Xmx256m" 限制内存,最小128,最大256
#-v 把配置文件挂载到es的docker里的配置文件

在浏览器打开,ip:9200看到es信息,就成功了,启动可能需要一点时间,要等一会。

二、搭建Kibana

启动kibana,这里没有先拉取镜像,docker没有镜像会到公共库尝试拉取,下面的一样。

#如果没有镜像会自动到公共库拉取再启动,-e 环境配置指向es的地址
docker run -p 5601:5601 -d --name kibana -e ELASTICSEARCH_URL=http://172.16.2.84:9200 -e ELASTICSEARCH_HOSTS=http://172.16.2.84:9200 kibana:7.13.2

在浏览器输入ip:5601,能看到kibana的信息,说明成功了

三、搭建kafka

1)kafka前置需要先安装zookeeper

#-v /etc/localtime:/etc/localtime把本机的时间挂载进docker,让docker同步主机的时间
docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime zookeeper

2)安装kafka

docker run  -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=172.16.2.84:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.16.2.84:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka
#KAFKA_BROKER_ID:kafka节点Id,集群时要指定
#KAFKA_ZOOKEEPER_CONNECT:配置zookeeper管理kafka的路径,内网ip
#KAFKA_ADVERTISED_LISTENERS:如果是外网的,则外网ip,把kafka的地址端口注册给zookeeper,将告诉 zookeeper 自己的地址为 XXXX,当消费者向 zookeeper 询问 kafka 的地址时,将会返回该地址
#KAFKA_LISTENERS: 配置kafka的监听端口

kafka界面查看可以用 kafka tool 地址:https://www.kafkatool.com/download.html

四、搭建Logstash

新建文件logstash.yml,logstash配置信息

http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://172.16.2.84:9200" ]
#host多节点用逗号隔开

新建文件logstashkafka.conf,读取kafka信息和写到es的信息

input {
kafka {
topics => "logkafka" #订阅kafka的topics
bootstrap_servers => "172.16.2.84:9092" # 从kafka的leader主机上提取缓存
codec => "json" # 在提取kafka主机的日志时,需要写成json格式
}
}
output {
elasticsearch {
hosts => ["172.16.2.84:9200"]
index => "logkafka%{+yyyy.MM.dd}" #采集到es的索引名称
#user => "elastic"
#password => "changeme"
}
}

把这两个文件放到主机目录上,这里放到/home/logstash

启动logstash容器

docker run --rm -it --privileged=true -p 9600:9600 -d --name logstash -v /home/logstash/logstashkafka.conf:/usr/share/logstash/pipeline/logstash.conf -v /home/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml logstash:7.13.2
#-v 把logstashkafka.conf和logstash.yml挂载到logstash容器

好了,到这里所有需要的容器都建好了运行docker ps -a看下所有容器

五、.Net Core写日志到kafka

.Net Core只要把日志写到kafka,然后logstash订阅kafka把日志写到es即可,这里是.Net Core5.0演示。

NuGet包安装Confluent.Kafka

 class Program
{
static async Task Main(string[] args)
{
Console.WriteLine("Hello World!");
//kafka节点
string brokerList = "172.16.2.84:9092";
string topicName = "logkafka";
while (true)
{
Console.WriteLine($"{Environment.NewLine}请输入发送的内容,发送topics名:{topicName}");
string content = Console.ReadLine();
await ConfluentKafka.PublishAsync(brokerList, topicName, content);
}
}
}
 public class ConfluentKafka
{
public static async Task PublishAsync(string brokerList, string topicName, string content)
{
//生产者配置
var config = new ProducerConfig
{
BootstrapServers = brokerList, //kafka节点
Acks = Acks.None //ack机制,0不等服务器确认,1主节点确认返回ack,-1全部节点同步完返回ack
};
using (var producer = new ProducerBuilder<string, string>(config)
.Build())
{
try
{
//key要给值,根据key做负载均衡,不然如果多节点,key不给值会全部写有一个分区
var deliveryReport = await producer.
ProduceAsync(
topicName, new Message<string, string> { Key = (new Random().Next(1, 10)).ToString(), Value = content });
Console.WriteLine($"向kafka发送了数据: {deliveryReport.TopicPartitionOffset}");
}
catch (ProduceException<string, string> e)
{
Console.WriteLine($"向kafka发送数据失败:{e.Message}");
}
}
}
}

运行程序,向kafka写数据

查看kafka队列,已经有数据

六、ELK日志查看

打开Kibana界面,ip:5601,打开左边的面板

点击索引匹配

输入匹配符,匹配到es日志索引,下一步

索引匹配创建完毕,返回到面板

七、其他方式写日志

上面介绍的是kafka方式写日志,也是ELK最佳方式,能承载大量的日志传输,这里列一下其他常用的方式,主要是修改logstash采集配置就可以了。

1.读目录文件方式,根据给的目录,文件类型去读取写到es,logstash配置

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline. input {
file {
path => "D:/Log/Application/*log.log" #读取目录下log.log结尾的文件
start_position => beginning
}
file {
path => "D:/Log/Application2/*log.log" #读取目录下log.log结尾的文件
start_position => beginning
}
}
output {
elasticsearch {
hosts => ["172.16.2.84:9200"]
index => "filelog"
#user => "elastic"
#password => "changeme"
}
}

2.Tcp方式,通过tcp方式写日志,在log4net和nlog中直接可配tcp请求logstash,配置

input {
tcp{
port => 8001
type => "TcpLog"
}
}
output {
elasticsearch {
hosts => ["172.16.2.84:9200"]
index => "tcplog"
#user => "elastic"
#password => "changeme"
}
}

3.reids,把日志推送到一个list类型的Key,logstash会订阅这个key读取消息写到es

input {
redis {
codec => plain
host => "127.0.0.1"
port => 6379
data_type => list
key => "listlog"
db => 0
}
}
output {
elasticsearch {
hosts => ["172.16.2.84:9200"]
index => "redislog"
#user => "elastic"
#password => "changeme"
}
}

4.RabbitMQ,把日志写到一个队列,让logstash订阅队列获取日志写到es

input {
rabbitmq {
host => "127.0.0.1" #RabbitMQ-IP地址
vhost => "test" #虚拟主机
port => 5672 #端口号
user => "admin" #用户名
password => "123456" #密码
queue => "LogQueue" #队列
durable => false #持久化跟队列配置一致
codec => "plain" #格式
}
} output {
elasticsearch {
hosts => ["172.16.2.84:9200"]
index => "rabbitmqlog"
}
}

ELK+kafka docker快速搭建+.NetCore中使用的更多相关文章

  1. docker快速搭建几个常用的第三方服务

    本次和大家分享的内容是使用docker快速搭建工作中常用的第三方的服务,对于有一些互联网背景的公司来说,以下几个服务都是很需要的:redis,rabbit,elasticsearch: 本篇涉及内容深 ...

  2. 使用Docker快速搭建ELK环境

    今天由于Win系统的笔记本没带回家,其次Docker在非Linux系统下都需要安装额外的软件去镜像才行 所以感觉没有差别,先直接用Mac搭建一遍呢, 本篇部分命令和配置内容为摘抄 Mac下使用Dock ...

  3. Docker快速搭建Zookeeper和kafka集群

    使用Docker快速搭建Zookeeper和kafka集群 镜像选择 Zookeeper和Kafka集群分别运行在不同的容器中zookeeper官方镜像,版本3.4kafka采用wurstmeiste ...

  4. 使用Docker快速搭建Zookeeper和kafka集群

    使用Docker快速搭建Zookeeper和kafka集群 镜像选择 Zookeeper和Kafka集群分别运行在不同的容器中zookeeper官方镜像,版本3.4kafka采用wurstmeiste ...

  5. spring boot / cloud (十八) 使用docker快速搭建本地环境

    spring boot / cloud (十八) 使用docker快速搭建本地环境 在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情 特别是现在,系统越来越复杂,所需要连接的一些中间件也越 ...

  6. 一文教您如何通过 Docker 快速搭建各种测试环境(Mysql, Redis, Elasticsearch, MongoDB) | 建议收藏

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  7. 五分钟用Docker快速搭建Go开发环境

    挺早以前在我写过一篇用 `Docker`搭建LNMP开发环境的文章:[用Docker搭建Laravel开发环境](http://mp.weixin.qq.com/s?__biz=MzUzNTY5MzU ...

  8. Docker-教你如何通过 Docker 快速搭建各种测试环境

    今天给大家分享的主题是,如何通过 Docker 快速搭建各种测试环境,本文列举的,也是作者在工作中经常用到的,其中包括 MySQL.Redis.Elasticsearch.MongoDB 安装步骤,通 ...

  9. 使用docker快速搭建hive环境

    记录一下使用docker快速搭建部署hive环境 目录 写在前面 步骤 安装docker 安装docker 安装docker-compose 配置docker国内镜像源(可选) 安装git & ...

随机推荐

  1. 集合类线程安全吗?ConcurrentModification异常遇到过吗?如何解决?

    集合类不安全的问题 1. ArrayList的线程不安全问题 1.1 首先回顾ArrayList底层 ArrayList的底层数据结构是数组 底层是一个Object[] elementData的数组, ...

  2. Java:Java多线程实现性能测试

    创建多线程和线程池 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import ...

  3. SpringMVC(5)数据绑定-2

    在SpringMVC(4)数据绑定-1中我们介绍了如何用@RequestParam来绑定数据,下面我们来看一下其它几个数据绑定注解的使用方法. 1.@PathVariable 用来绑定URL模板变量值 ...

  4. shell中的特殊变量IFS

    shell中特殊变量IFS的使用 IFS是内部字段分隔符(internal field separator).默认情况下,bash shell会将空格.制表符.换行符 当做字段分隔符. IFS=$'\ ...

  5. MySQL 中的转义字符`

    ` 是 MySQL 的转义符,用来避免列名或者表名和 mysql 本身的关键字冲突. 所有的数据库都有类似的设置,不过mysql用的是`而已.通常用来说明其中的内容是数据库名.表名.字段名,不是关键字 ...

  6. fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化

    fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化 在开发过程中,经常需要和前端交互数据,数据交互的格式都是JSON,在此过程中免不了json字符串 ...

  7. 深入理解Java并发类——AQS

    目录 什么是AQS 为什么需要AQS AQS的核心思想 AQS的内部数据和方法 如何利用AQS实现同步结构 ReentrantLock对AQS的利用 尝试获取锁 获取锁失败,排队竞争 参考 什么是AQ ...

  8. 「NOIP2017」宝藏

    「NOIP2017」宝藏 题解 博客阅读效果更佳 又到了一年一度NOIPCSP-S 赛前复习做真题的时间 于是就遇上了这道题 首先观察数据范围 \(1 \le n \le 12\) ,那么极大可能性是 ...

  9. WinForm使用DataGridView实现类似Excel表格的查找替换

    在桌面程序开发过程中我们常常使用DataGridView作为数据展示的表格,在表格中我们可能要对数据进行查找或者替换. 其实要实现这个查找替换的功能并不难,记录下实现过程,不一定是最好的方式,但它有用 ...

  10. 接入 SDK 结果翻车了?了解 SDK 的那些事

    前段时间,二狗子的朋友圈被工信部发布的<关于下架侵害用户权益 App 名单的通报>给刷屏了.公告中指出有 90 款 App 未按照要求完成整改将会下架.而这 90 款 App 涉及全国各地 ...