自己的服务器日志只是简单的做了按天分割的处理,要想从日志中找些什么确实是一个很难完成的事情,于是想到了对日志文件的处理,对于这样的任务,经常在服务中使用的 ELK 成为了我的首选。

以下所有服务的搭建都基于 Docker Compose

服务搭建

首先便是搭建 Kibana、Elastic Search、Filebeat 和 Metricbeat 四个服务。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
---
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.11
restart: unless-stopped
container_name: elasticsearch
environment:
- "discovery.type=single-node"
networks:
- elastic
ports:
- 9200:9200
- 9300:9300
kibana:
image: docker.elastic.co/kibana/kibana:7.17.11
restart: unless-stopped
container_name: kibana
environment:
- "ELASTICSEARCH_HOSTS=http://elasticsearch:9200"
networks:
- elastic
ports:
- 5601:5601
metricbeat:
image: docker.elastic.co/beats/metricbeat:7.17.11
restart: unless-stopped
container_name: metricbeat
user: root
networks:
- elastic
command: metricbeat -e -E setup.kibana.host=kibana:5601 -E output.elasticsearch.hosts=["elasticsearch:9200"]
volumes:
- ./metricbeat/metricbeat.yml:/usr/share/metricbeat/metricbeat.yml
- ./metricbeat/modules.d:/usr/share/metricbeat/modules.d
- /var/run/docker.sock:/var/run/docker.sock:ro
- /sys/fs/cgroup:/hostfs/sys/fs/cgroup:ro
- /proc:/hostfs/proc:ro
- /:/hostfs:ro
filebeat:
image: docker.elastic.co/beats/filebeat:7.17.11
restart: unless-stopped
container_name: filebeat
user: root
networks:
- elastic
command: filebeat -e --strict.perms=false -E setup.kibana.host=kibana:5601 -E output.elasticsearch.hosts=["elasticsearch:9200"]
volumes:
- ./filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
- ./filebeat/modules.d:/usr/share/filebeat/modules.d
- /var/run/docker.sock:/var/run/docker.sock:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
nginx:
image: nginx
restart: unless-stopped
container_name: elastic_nginx
networks:
- elastic
ports:
- 80:80
networks:
elastic:

这里使用的版本是 7.17.11 版本,当前最新版本为 8.8,在当前版本增强了安全特性,导致测试不是太过友好,所以这次搭建选择了较老的版本,新版本以后有机会再试吧。

可以看到,使用我们将所有的服务全部放在了同一个 Network 下,并且将 /var/run/docker.sock 映射到了 filebeatmetricbeat 两个服务中,便于获取 nginx 的信息。

metricbeat 配置

启用 Nginx 模块

metricbeat 默认包含许多预配置项,对于 nginx 直接启用即可。

1
docker-compose exec metricbeat metricbeat modules enable nginx

自动发现

由于我们的服务是基于 Docker 无法像传统服务执行本机路径,所以需要配置自动发现。

配置文件为 metricbeat.yml

1
2
3
4
5
6
7
8
9
10
11
metricbeat.autodiscover:
providers:
- type: docker
templates:
- condition:
contains:
docker.container.image: nginx
config:
- module: nginx
metricsets: ["stubstatus"]
hosts: "${data.host}:${data.port}"

Filebeat 配置

启用 Nginx 模块

1
docker-compose exec filebeat filebeat modules enable nginx

自动发现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
filebeat.autodiscover:
providers:
- type: docker
templates:
- condition:
contains:
docker.container.image: nginx
config:
- module: nginx
access:
input:
type: docker
containers.ids:
- "${data.docker.container.id}"
error:
input:
type: docker
containers.ids:
- "${data.docker.container.id}"

配置结束后便可以启动服务。

访问 http://127.0.0.1:9200/ 可以检查 ES 的启动是否成功。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"name":"6c6c3a287390",
"cluster_name":"docker-cluster",
"cluster_uuid":"d77Jxv4TRIWYBrIMWKA8Dw",
"version":{
"number":"7.17.11",
"build_flavor":"default",
"build_type":"docker",
"build_hash":"eeedb98c60326ea3d46caef960fb4c77958fb885",
"build_date":"2023-06-23T05:33:12.261262042Z",
"build_snapshot":false,
"lucene_version":"8.11.1",
"minimum_wire_compatibility_version":"6.8.0",
"minimum_index_compatibility_version":"6.0.0-beta1"
},
"tagline":"You Know, for Search"
}

使用 http://127.0.0.1:5601/ 访问 Kibana。

点击左侧 Observability 可以查看可视化数据,点击 Logs 可以查看 Nginx 日志。

image-20230706182402842

参考:

自建网站或者在访问别人的网站时,有些人习惯性的关注浏览器地址栏左侧的小绿锁,总觉得没有它这个网站就不安全,这个问题也许是对的,毕竟 12306 和 MIT 的网站至今也没加上锁。对于 HTTPS 的讨论不是今天所关注的终点范畴,我们今天研究的对象是——如何给我们的网站加上这一把小绿锁。

阅读全文 »

在 IDEA 中我们可以直接安装 docker 插件添加 docker 作为运行环境,但是通常来说 docker 都是部署在 Linux 机器上。就个人习惯而言,一般是将 docker 安装在 Debian 虚拟机中,毕竟 IDEA 主要是在 Windows 下运行,而在 Windows 下安装 docker 实在是有些不合适,所以就需要配置 docker 的远程连接。

阅读全文 »

在使用 Markdown 编写博客插入图片时,经常会先将图片上传至图床,然后再将图床链接插入 Markdown 中,但是这种操作过于麻烦,Typora 的自动上传功能让我们可以在插入图片的同时自动将图片上传至我们设定的图床并且更换 Markdown 中的路径。

阅读全文 »

  • 高亮语法:zsh-syntax-highlighting
  • 自动补全:zsh-autosuggestions
1
2
3
4
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
plugins=(其他的插件 zsh-autosuggestions zsh-syntax-highlighting)
source ~/.zshrc

  • 使用 ssh-keygen 生成密钥对
1
2
3
# ssh-keygen -o -t rsa -b 4096 -C "your_email@example.com"
# ed25519 加密算法运算速度更快
ssh-keygen -t ed25519 -C "your_email@example.com"
  • 使用 ssh-copy-id 将公钥发送至目标主机
1
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
  • 使用 ssh 免密登录

ssh user@host

Oh My Zsh 是一个令人愉悦的,开源的,社区驱动的框架,用于管理您的 Zsh 配置。它捆绑了成千上万的有用功能,助手,插件,主题以及一些让您大喊大叫的东西…

毕竟一切向颜值看起,OMZ 的颜值绝对算得上能打的那一种。

阅读全文 »
0%