给电子档案穿上三层铠甲,别让数据裸奔!
档案信息孤岛通常表现为:数据存储在不同部门、不同格式的独立系统中(如纸质档案、部门级文件服务器、旧版档案软件、业务系统附件),导致无法进行跨库、全文、精准检索。其技术根源在于数据格式不统一、接口封闭、缺乏元数据标准。
解决思路是建立一个“统一检索门户”,它不直接替换原有存储系统,而是通过技术手段将分散的数据“索引化”,提供单一的查询入口。本文将使用成熟的开源技术栈 ELK (Elasticsearch, Logstash, Kibana) 来实现,因其在全文检索和数据可视化方面具备强大且免费的能力。
本方案在Linux服务器 (Ubuntu 20.04 LTS) 上部署。请确保服务器有至少 8GB 内存和 50GB 可用磁盘空间。
Elasticsearch 依赖 Java。运行以下命令安装 OpenJDK 11:
sudo apt update
sudo apt install -y openjdk-11-jdk-headless
java -version 验证安装,应显示 11.x.x
导入Elasticsearch的GPG密钥并添加APT源:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update
安装Elasticsearch:
sudo apt install -y elasticsearch
编辑配置文件,设置允许网络访问并调整内存,这是关键步骤:
sudo vim /etc/elasticsearch/elasticsearch.yml
找到并修改以下行(去掉行首的注释符,并修改值):
network.host: 0.0.0.0 允许任何IP访问,生产环境请设置为具体IP
cluster.initial_master_nodes: ["你的服务器主机名"] 用 `hostname` 命令查看
调整JVM堆内存大小,避免占用全部系统内存:
sudo vim /etc/elasticsearch/jvm.options
修改以下两行(根据服务器内存调整,4GB内存服务器建议设为1g):
-Xms1g
-Xmx1g
启动并设置开机自启:
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
验证安装,执行以下命令,若返回包含“number”的JSON数据,则成功:
curl -X GET "localhost:9200/"
安装Logstash,它将负责从各数据源采集、转换并导入数据到Elasticsearch:
sudo apt install -y logstash
创建第一个数据管道配置文件,用于处理来自文件服务器的文档:
sudo vim /etc/logstash/conf.d/file_ingest.conf
将以下配置完整复制进去。这个配置会监控 /mnt/档案共享盘 目录下的所有PDF、DOC、TXT文件,提取其文本内容,并建立索引。
input {
file {
path => ["/mnt/档案共享盘//.pdf", "/mnt/档案共享盘//.doc", "/mnt/档案共享盘//.docx", "/mnt/档案共享盘//.txt"]
start_position => "beginning"
sincedb_path => "/dev/null" 仅首次全量扫描时使用,后续可移除
}
}
filter {
处理DOC/DOCX文件,需安装插件:sudo /usr/share/logstash/bin/logstash-plugin install logstash-filter-docx
if [path] =~ "\.docx?$" {
docx {
source => "message"
target => "text_content"
}
mutate {
replace => { "message" => "%{[text_content]}" }
remove_field => ["text_content"]
}
}
处理PDF文件,需安装插件:sudo /usr/share/logstash/bin/logstash-plugin install logstash-filter-pdf
if [path] =~ "\.pdf$" {
pdf {
source => "message"
target => "text_content"
}
mutate {
replace => { "message" => "%{[text_content]}" }
remove_field => ["text_content"]
}
}
提取文件元信息
grok {
match => { "path" => "%{GREEDYDATA}/%{GREEDYDATA:file_name}\.%{WORD:file_ext}" }
}
mutate {
add_field => {
"data_source" => "文件服务器"
"ingest_timestamp" => "%{@timestamp}"
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "unified-archive-%{+YYYY.MM.dd}" 索引命名规则
document_id => "%{path}-%{+YYYY.MM.dd}" 文档ID
}
stdout { codec => rubydebug } 在日志中输出,用于调试,稳定后可关闭
}
安装必要的插件并启动Logstash:
sudo /usr/share/logstash/bin/logstash-plugin install logstash-filter-docx
sudo /usr/share/logstash/bin/logstash-plugin install logstash-filter-pdf
sudo systemctl enable logstash
sudo systemctl start logstash
检查Logstash日志,确认无报错且开始处理文件:
sudo tail -f /var/log/logstash/logstash-plain.log
安装Kibana,它将为我们提供Web操作界面:

sudo apt install -y kibana
编辑Kibana配置文件,允许外部访问并连接Elasticsearch:
sudo vim /etc/kibana/kibana.yml
找到并修改:
server.port: 5601
server.host: "0.0.0.0" 生产环境建议配置Nginx反向代理
elasticsearch.hosts: ["http://localhost:9200"]
启动并设置开机自启:
sudo systemctl enable kibana
sudo systemctl start kibana
此时,在浏览器访问 http://你的服务器IP:5601 即可打开Kibana界面。
首次登录Kibana后:
unified-archive- 作为索引模式,点击 Next step。点击左侧导航栏的 Discover(放大镜图标)。
在左上角的下拉菜单中,选择刚刚创建的 unified-archive- 索引模式。
此时,页面中央会显示所有已被索引的档案文件列表。在顶部的搜索栏中,你可以:
file_ext:pdf and data_source:"文件服务器"。file_name, path, data_source 等字段,使其在结果列表中显示。许多档案的元数据(如案卷号、责任者、日期)可能存储在MySQL数据库中。我们需要将这些结构化数据也索引进来。
创建Logstash的第二个管道配置文件:
sudo vim /etc/logstash/conf.d/mysql_ingest.conf
将以下配置完整复制进去,并替换其中的数据库连接信息:
input {
jdbc {
jdbc_driver_library => "/usr/share/logstash/mysql-connector-java-8.0.28.jar" 需提前下载此JAR包
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://你的数据库IP:3306/你的数据库名?useSSL=false&serverTimezone=UTC"
jdbc_user => "数据库用户名"
jdbc_password => "数据库密码"
schedule => " " 每分钟执行一次,可按需调整
statement => "SELECT id, archive_number, title, author, create_date, storage_location FROM archive_meta_table WHERE update_time > :sql_last_value"
use_column_value => true
tracking_column => "update_time"
tracking_column_type => "timestamp"
last_run_metadata_path => "/var/lib/logstash/mysql_archive_last_run"
}
}
filter {
mutate {
add_field => { "data_source" => "数据库元数据" }
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "unified-archive-%{+YYYY.MM.dd}"
document_id => "%{id}-db" 确保ID与文件索引不冲突
}
}
下载MySQL JDBC驱动并重启Logstash:
sudo wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar -P /usr/share/logstash/
sudo systemctl restart logstash
重启后,数据库中的元数据将每分钟同步至索引。在Kibana Discover页面,你可以同时检索到文件内容和数据库元数据。
使用Nginx为Kibana添加基础认证:
sudo apt install -y nginx apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd_kibana 你的用户名 设置密码
创建Nginx站点配置:
sudo vim /etc/nginx/sites-available/kibana
添加以下配置:
server {
listen 80;
server_name 你的域名或IP;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.htpasswd_kibana;
location / {
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
启用配置并重启Nginx:
sudo ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
现在,通过 http://你的域名或IP 访问,需要输入用户名密码。
/etc/logstash/logstash.yml 中的 pipeline.workers 参数(建议设为CPU核心数)。至此,一个能够打通文件服务器、数据库等多种来源的企业档案统一检索平台已部署完成。所有操作均基于明确命令和完整配置,可直接执行。后续可根据需要,通过编写更多的Logstash管道配置文件,集成其他业务系统数据源。
给电子档案穿上三层铠甲,别让数据裸奔!