1.Zookeeper
对于Zookeeper
我们用一条简单的命令来测试一下:
echo ruok|nc localhost 2181
你应该可以看到:
imok
2.Kafka
Kafka 是由 Linked 开发并且开源的一套分布式的流平台,它类似于一个消息队列。 Kafka 的优势就是适合构建实时的流数据管道,并且可靠地获取系统和应用程序之间的数据, 还可以实时的对数据流进行转换。Kafka 的使用场景很多, 特别是在需要高吞吐量的系统上。首先来理解一下 Kafka 的几个基本的概念:
- Topic, Kafka 将消息进行分类,每一类的消息称之为一个主题(Topic).
- Producer, 发布消息的对象称之为主题生产者(Producer)
- Consumer, 订阅消息并处理消息的对象称之为主题消费者(Consumers)
- Broker, 已发布的消息保存在一组服务器中,称之为Kafka集群。集群中的每一个服务器都是一个代理(Broker)。 消费者可以订阅一个或多个主题(topic),并从Broker拉数据,从而消费这些已发布的消息。
1. 创建一个主题
我们可以登录到 Kafka 容器中,做一些简单的小测试,登录到容器中的命令:
docker-compose exec kafka bash
首先来创建一个名为test的 Topic ,只有一个分区和一个备份:
kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic test
创建好之后,可以通过运行以下命令,查看topic信息:
kafka-topics.sh --list --zookeeper zookeeper:2181
2. 发送消息
Kafka 默认有提供了一个命令行的工具用来发送消息,一行是一条消息,运行 Producer 然后输入一些信息:
kafka-console-producer.sh --broker-list localhost:9092 --topic test
3. 消费消息
Kafka 也提供了一个消费消息的命令行工具,将存储的信息输出出来。
kafka-console-consumer.sh --zookeeper zookeeper:2181 --topic test --from-beginning
3. Elasticsearch
ElasticStack
技术栈包括的三个软件,而且一开始就是5.0
的大版本,主要目的是为了让其他的软件版本号一致,方便各个软件的对应。不过到现在已经发展到了6.0
的版本了,我们这次就是用这个版本。具体的更新详细可以查看这里Elasticsearch,这里只说说基本的概念。
Elasticsearch
之所以可以方便的进行查询过滤排序是因为和 MongoDB 一样存储的是整个文档,然后还会根据文档的内容进行索引,而且文档的格式用的还是很友好的 JSON,比如一个简单的用户对象可以这么表示:
{
"name": "Xiao Ming",
"phone": "10086",
"age": "25",
"info": {
"site" : "https://sunnyshift.com"
"likes": ["games", "music"]
}
}
在 Elasticsearch 中有四个名词,索引(idnex)、类型(type)、文档(document)、字段(field),这四个字段类似于数据库中的数据库(database), 表(table), 行(row), 列(column), Elasticsearch 可以包含多个索引,每个索引可以包含多个类型,每个类型可以包含多个文档,每个文档可以包含多个字段,把他想成数据库就行了。
我们来简单操作一下,先来创建一个索引,并且插入几条数据:
PUT /banji/xuesheng/1
{
"name": "Xiao Ming",
"age": "12"
}
PUT /banji/xuesheng/2
{
"name": "Xiao Hong",
"age": "16"
}
具体操作可以使用 Kibana 上面的 Dev Tools 来运行命令:
有了数据之后就可以来简单的检索一下:
这里只是介绍了一下简单的入门使用,之后可以像一些其他的操作比如过滤、组合、全文、啥的都不在话下,甚至还可以高亮搜索结果。
4. Logstash
Logstash 是一个日志收集器,支持非常多的输入源和输出源。我们简单的整合一下 ElasticStack 这个技术栈,这里用 Nginx 的访问日志来测试一下。Logstash 最新的是有一个 Beats 的组件来收集数据,这里先不考虑而是使用传统的配置文件,我们会直接把配置写到配置文件中。
Logstash 使用一个名叫 FileWatch 的 Ruby Gem 库来监听文件变化。这个库支持 glob 展开文件路径,而且会记录一个叫 .sincedb 的数据库文件来跟踪被监听的日志文件的当前读取位置。
使用 Dcoker 后配置文件路径在logstash/config
下,可以在该目录下放置多个配置文件,最后 Logstash 会帮我们合并成一个。先来定义一个读取 Nginx 访问日志的配置:
input {
file {
path => [ "/var/log/nginx/access.log"]
type => "accesslog"
}
}
output {
# 输出到 elasticsearch,索引名为 access-log
elasticsearch {
hosts => "localhost:9200"
index => "access-log"
user => "elastic"
password => "changeme"
}
}
要注意的是这里写的 Nginx 的路径是相对于 Logstash 容器的,所以要把该路径挂载到容器中。然后重启 Logstash 就可以去 Kibana 中查看日志了, 附上 Logstash 重启命令。如果一切正常,那么就可以去 Kibana 中日志了。
docker-compose stop logstash
docker-compose up -d logstash
5. Kibana
Kibana 是一个可视化的 UI 界面,并且可以检索聚合分词搜索在 Elasticsearch 中的数据,并且还可以以非常精美的图标来展示统计数据。我们需要在 Management 页面中告诉 Kibana 我们刚才创建的 access-log 索引。
到这里就完成了收集 Nginx 系统日志并展示出来,对于 Kibana 还有很多用法,就不一一撰述了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。