In this paper, we consider systems that can be modeled as directed acyclic graphs such that nodes represent components of the system and directed edges represent fault propagation between components. Some components can be equipped with alarms that ring when they detect faulty (abnormal) behavior. We study algorithms that attempt to minimize the number of alarms to be placed so that a fault at any single component can be detected and uniquely diagnosed. We first show that the minimization problem is intractable, i.e., NP-hard, even when restricted to three level graphs in which all nodes have outdegree two or less. We present optimal algorithms for three special classes of graphs - tree structured graphs, single-entry single-exit series-parallel graphs and two level graphs. We then present a polynomial-time approximation algorithm for the general case which guarantees that the ratio of the number of alarms placed to the optimum required is within a factor that is logarithmic in the number of nodes in the graph. Moreover, by showing a reduction from the minimum dominating set problem to the minimum alarm set problem, we argue that this performance guarantee is tight to within a constant factor. Finally, we demonstrate the connection between the minimum alarm set problem and the minimum test collection problem, and prove similar results.